c++ - 从内存中提取 double 的字节值

标签 c++ double byte

我正在尝试从计算机内存中提取 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/

相关文章:

c++ - 当输入声明为 double [C++] 时检查输入是否为空

Java (J2ME) 将图像转换为 byte[],然后返回图像

c# - 从 C# 程序调用 G++

c++ - 如何将我的 directshow 过滤器添加到过滤器图中

c++ - cocos2d-x EventDispatcher 不再是单例了吗?

swiftui - 使用双值识别 SwiftUI TextField 中的更改

c++ - 测试树是否为二叉搜索树

java - 从 JSON 中读取不带小数点的浮点或 double 值

c# - 在 C# 中设计比特流

将 C 字节数组转换为 long long