我遇到的问题似乎是非常简单的代码,但它完全符合我的期望:
码:
char b[sizeof(float)];
float a = 1.5f;
memcpy(b, &a, sizeof(float));
printf("%f\n", b[0]);
Run Code Online (Sandbox Code Playgroud)
输出:
62827075002794546937726511559700164562271693617156259118887055013962964939146547
22493354730179062365918845182857228200743453702107162763566167344423902681816648
14169764096333089859051972349071751428406066879715295195780847944297207011246001
33742258486014791122944.000000
Run Code Online (Sandbox Code Playgroud)
然而,当我这样做时它起作用:
char b[sizeof(int)];
int a = 3;
memcpy(b, &a, sizeof(int));
printf("%i\n", b[0]);
Run Code Online (Sandbox Code Playgroud)
输出:
3
Run Code Online (Sandbox Code Playgroud)
为什么会这样?是因为字节序还是其他什么?
您的代码具有未定义的行为.表达式b[0]是a char(提升为int),格式说明符%f需要a double.
(对于你看到的输出,可能有任何数量的解释.最令人想到的是,a double比int你的平台更宽,读取垃圾内存.如果你想要一个稍微更可预测的实验,试试传递static_cast<uint64_t>(b[0])为这个论点.)
| 归档时间: |
|
| 查看次数: |
3691 次 |
| 最近记录: |