从内存中提取double的字节值

nf3*_*743 3 c++ double byte

我正在尝试从计算机的内存中提取double的字节值.其原因是准确性,因为表示给用户的最终值具有一些舍入.

理想情况下,我希望能够从数字(IEEE 754标准)中提取符号,指数和尾数

根据我的理解,转换为无符号字符是可行的方法.我有以下代码片段(在其他地方被盗),但我不相信结果 - 任何整数值都没有字节输出:

double d = 2;
unsigned char *p = (unsigned char*)&d;
Run Code Online (Sandbox Code Playgroud)

任何人都可以指导我正确的方向,以准确提取双数字的字节表示,或提供有关如何进行的任何建议/意见?

Ker*_* SB 5

你说得对.您现在可以p视为一个数组unsigned char[sizeof(double)].

例如:

for (int i = 0; i != sizeof(double); ++i)  printf("%02X ", p[i]);
Run Code Online (Sandbox Code Playgroud)

对于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
Run Code Online (Sandbox Code Playgroud)

指数字段的值为1020,在通过1023的偏差进行校正后给出-3的指数,并且在包括隐式前导1之后尾数为1.0.因此该值为2 -3  = 1/8.