吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 840|回复: 6
收起左侧

[已解决] C++ 半精度浮点数转换

 关闭 [复制链接]
hellozl 发表于 2023-11-29 11:17
本帖最后由 hellozl 于 2023-11-29 19:22 编辑

目的:
待转换数据(2字节)    0x2E0F     0x2E0F     0x2E1A     0x2E26     0x2E26
想要得到的数据           +1.799219  +1.799219  +1.800897  +1.802728  +1.802728

目前,我采集到一系列数据,数据形式为2字节的数,希望将其转化为浮点数。
然而,float存储时应占据4字节,通过常见的类型强制转换方案(如static_cast、reinterpret_cast)无法实现。

查阅资料得知,存在一种半精度的浮点数类型,在利用half.hpp定义的half类型,尝试转换后,未得到理想结果。
尝试使用boost手册中boost.math的float16_t类型,但是报错boost命名空间没有float16_t的定义。

求助:请问将上述待转换数据转换为浮点数,应采用什么方法。

附:常见4字节float转换代码

#include <iostream>

using namespace std;
typedef unsigned char BYTE;

int main()
{
    BYTE data[] = {0x2E, 0x0F, 0x2E, 0x0F, 0x00, 0x00};
    float* fvalue = reinterpret_cast<float*>(data);
    cout << *fvalue<< endl;
    return 0;
}

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
yufeixuan + 1 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

头像被屏蔽
晨曦的雾 发表于 2023-11-29 12:34
提示: 该帖被管理员或版主屏蔽
bester 发表于 2023-11-29 13:36
你怎么确定0x2E0F就是+1.799219?直接转浮点数好像才1.65多点
JuncoJet 发表于 2023-11-29 13:50
 楼主| hellozl 发表于 2023-11-29 16:18
JuncoJet 发表于 2023-11-29 13:50
直接套用计算公式

谢谢分享,按照这个标准计算的结果与我调用half.hpp库得到的结果一致,但是和我的对应关系不同,我会再次确认下,对应关系是不是出错了,谢谢你
[C++] 纯文本查看 复制代码
#include <iostream>
#include "half.hpp"

using namespace std;
typedef unsigned char BYTE;

int main()
{
    BYTE data[] = {0x0F, 0x2E, 0x00, 0x0F, 0x00, 0x00};
    half_float::half* fvalue = reinterpret_cast<half_float::half*>(data);
    cout << *fvalue<< endl;
    return 0;
}
 楼主| hellozl 发表于 2023-11-29 19:22
bester 发表于 2023-11-29 13:36
你怎么确定0x2E0F就是+1.799219?直接转浮点数好像才1.65多点

谢谢你的回答,我发现我采集的数据从16进制到浮点数,是按比例换算的,我一开始的解决方向错误,实际上可由下式换算0x2dca->11722;V=11722/65535*(5-(-5))。
bester 发表于 2023-11-29 20:30
hellozl 发表于 2023-11-29 19:22
谢谢你的回答,我发现我采集的数据从16进制到浮点数,是按比例换算的,我一开始的解决方向错误,实际上可 ...

怪不得怎么算都不对,有算法就很好写代码了,直接将16进制转10进制,再转成float相除
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-1-10 18:43

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表