我正在尝试从计算机的内存中提取double的字节值.其原因是准确性,因为表示给用户的最终值具有一些舍入.
理想情况下,我希望能够从数字(IEEE 754标准)中提取符号,指数和尾数
根据我的理解,转换为无符号字符是可行的方法.我有以下代码片段(在其他地方被盗),但我不相信结果 - 任何整数值都没有字节输出:
double d = 2;
unsigned char *p = (unsigned char*)&d;
Run Code Online (Sandbox Code Playgroud)
任何人都可以指导我正确的方向,以准确提取双数字的字节表示,或提供有关如何进行的任何建议/意见?
你说得对.您现在可以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.