读取以二进制格式存储在字符数组中的双精度
Reading a double stored in a binary format in a character array
我正在尝试读取一个以特定二进制格式存储在char数组中的浮点数。格式如下,其中每个字母代表一个二进制数字:
SEEEEEEE MMMMMMMM MMMMMMMM MMMMMMMM MMMMMMMM MMMMMMMM MMMMMMMM MMMMMMMM
本网站对格式进行了更清晰的解释。基本上,指数是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
稍后,我使用以下代码将长整数转换为浮点数:
double m = a;
m = m*(pow(16, e-14));
m = (s==1)?-m:m;
这里出了什么问题?此外,我很想知道这样的转换在理想情况下是如何实现的?
我还没有尝试运行你的代码,但我怀疑你得到这个的原因:
0x27f4c18f5c27f6
而不是
0x28f5c28f5c28f6
是因为前面的单元格中有一个"负数"。您的8位字节数组是有符号值还是无符号值?我希望如果你让它不签名,它会更好地工作。[或者移动你的演员阵容,使其在轮班操作之前]。
相关文章:
- 转换函数,将 std::数组的双精度作为参数或双精度作为参数单独转换
- 使用 Xcode 将双精度存储在数组C++中
- 为什么我的数组双精度函数不起作用?
- 如何在 C++ 中将双精度数组中的值"force convert"到字符串输出中?
- 在字符数组 (C++/根) 中查找双精度值
- 复杂度 O(N) 数组和双精度
- 将双精度值分配给 int 数组时的类型转换
- 对需要双精度数组和结构作为输入C++ DLL 函数的 C# 调用
- 2D 矢量数组用零而不是双精度值填充
- 在 C++ 中将双精度数组值转换为字符值
- 如何在 Arduino C++ 中将大小为 64 的字节数组转换为双精度值列表?
- C# 是否有办法将双精度数组强制转换为类似于C++转换为 char* 的字符串?
- 将协议缓冲区中的二进制双精度数组转换为 JavaScript 数字
- 如何将 4 个浮点数的 ps 向量转换为 4 个双精度并存储到 pd 数组
- C++ 错误错误:数组下标的类型"双精度 [10][10][double]"无效
- 复制地图<双精度,元组<双精度,双精度>>映射<双精度,双精度>没有循环?
- 双精度随机数数组
- 在 c++ 中将双精度转换为 8 长度的字符数组
- std::copy 将双精度数组复制到浮点数数组
- 以双精度数除以双精度数来获得循环中的余数和char参数不起作用