为什么 char 数组到 int 在 C++ 中工作相反?
#include <iostream>
int main() {
unsigned char bytes[] = {1, 2, 3, 4};
unsigned int a;
std::memcpy(&a, bytes, 4);
std::cout << a << std::endl; // result: 67305985
return 0;
}
我尝试将 char 数组转换为 int,但发现了一些奇怪的东西。其中“a”是67305985,可以在在线转换器(网页)中将其转换为00000100000000110000001000000001
。 00000100, 00000011, 00000010, 00000001
等于 4, 3, 2, 1
的二进制。为什么会发生这些事情以及计算机在这个时期是如何工作的?
* PS。我没有尝试将 char 数组 {1, 2, 3, 4}
转换为 int 1234
。只是出于好奇才这么做的。
#include <iostream>
int main() {
unsigned char bytes[] = {1, 2, 3, 4};
unsigned int a;
std::memcpy(&a, bytes, 4);
std::cout << a << std::endl; // result: 67305985
return 0;
}
I tried to convert char array to int, and I found something weird. The "a" is 67305985, and it can be converted to 00000100000000110000001000000001
in online converter(webpage). And 00000100, 00000011, 00000010, 00000001
is eqaul to 4, 3, 2, 1
's binary. Why these thing happen and how computer works in these time?
*ps. I wasn't try to convert char array {1, 2, 3, 4}
to int 1234
. Just did that for curiosity.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
抱歉最后一个答案,您的用法没有错误,但该程序适用于字节顺序,即最小空间中的最大值和最大空间中的最小值。一般来说,memcpy 用于将数据从一个类型复制到同一类型。你的代码很有趣,因为我还没有见过很多这样的例子,保持好奇心!
Sorry for the last answer, your usage is not wrong but the program works on Endianness, largest value in smallest space and smallest value in largest space. Generally
memcpy
is used for copying data from a type to the same type. Your code is interesting since I have not seen many examples like it, keep up the curiosity!