我正在尝试从计算机内存中提取 double 值的字节值。这样做的原因是准确性,因为向用户表示的最终值进行了一些舍入。
理想情况下,我希望能够从数字中提取符号、指数和尾数(IEEE 754 标准)
据我所知,转换为 unsigned char 是可行的方法。我有以下代码片段(从别处偷来的),但我不相信结果 - 没有任何整数值的字节输出:
double d = 2;
unsigned char *p = (unsigned char*)&d;
谁能指导我朝着正确的方向准确提取双数的字节表示,或者就如何进行提出任何建议/意见?
最佳答案
你做得对。您现在可以将 p
视为数组 unsigned char[sizeof(double)]
。
例如:
for (int i = 0; i != sizeof(double); ++i) printf("%02X ", p[i]);
对于 d = 0.125
,这将打印 00 00 00 00 00 00 C0 3F
。颠倒字节顺序并分解成部分,这是:
00111111 11000000 0 0 0 0 0 0
3F C0 0 0 0 0 0 0
0 01111111100 0...<52 times>...0
S Exponent Mantissa
+ 1023 - 3 1.0
指数字段的值为 1020,经过 1023 的偏差校正后指数为 −3,尾数为 1.0,包括隐含的前导 1。因此值为 2−3 = 1/8。
关于c++ - 从内存中提取 double 的字节值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8771783/