gpt4 book ai didi

c++ - 读取以二进制格式存储在字符数组中的 double

转载 作者:太空宇宙 更新时间:2023-11-04 11:59:19 25 4
gpt4 key购买 nike

我正在尝试读取以特定二进制格式存储在 char 数组中的 float 。格式如下,每个字母代表一个二进制数字:

SEEEEEEE MMMMMMMM MMMMMMMM MMMMMMMM MMMMMMMM MMMMMMMM MMMMMMMM MMMMMMMM

格式在 website 中解释得更清楚.基本上,指数采用 Excess-64 表示法,尾数标准化为值 <1 和 >1/16。要获得数字的真实值,将尾数乘以 16 的指数真实值的幂。

基本上,到目前为止我所做的是提取符号和指数值,但我在提取尾数时遇到了问题。我正在尝试的实现是相当蛮力的,在代码方面可能远非理想,但在我看来它是最简单的。它基本上是:

unsigned long a = 0;
for(int i = 0; i < 7; i++)
a += static_cast<unsigned long>(m_bufRecord[index+1+i])<<((6-i)*8);

它获取存储在 char 数组中的每个 8 位字节大小,并根据它在数组中的索引将其左移。所以如果我的数组如下:

{0x3f, 0x28, 0xf5, 0xc2, 0x8f, 0x5c, 0x28, 0xf6}

我期望 a 取值:

0x28f5c28f5c28f6

但是,通过上述实现,a 取值:

0x27f4c18f5c27f6

稍后,我使用以下代码将长整数转换为 float :

double m = a;

m = m*(pow(16, e-14));
m = (s==1)?-m:m;

这里出了什么问题?另外,我很想知道如何理想地实现这样的转换?

最佳答案

我没有试过运行你的代码,但我怀疑你得到这个的原因:

0x27f4c18f5c27f6

代替

0x28f5c28f5c28f6

是因为您前面的单元格中有一个“负数”。您的 8 位字节数组是有符号值还是无符号值?如果您将其设为未签名,我希望它会更好用。 [或者移动你的石膏,使其在轮类操作之前]。

关于c++ - 读取以二进制格式存储在字符数组中的 double,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14799210/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com