在 C 中将 4 个字节的 char 转换为 int32

标签 c

我首先将一个 int32 数字转换为 char[4] 数组,然后通过 (int *) 将数组转换回 int32,但数字与之前的数字不同:

unsigned int num = 2130706432;
unsigned int x;
unsigned char a[4];

a[0] = (num>>24) & 0xFF;
a[1] = (num>>16) & 0xFF;
a[2] = (num>>8) & 0xFF;
a[3] = num & 0xFF;

x = *(int *)a;
printf("%d\n", x);

输出为 127。如果我设置 num = 127,则输出为 2130706432。 有没有人有想法?

最佳答案

反转 a[] 索引的顺序,例如。 a[0] -> a[3]

我认为你的字节顺序是相反的。

试试这个:

a[3] = (num>>24) & 0xFF;
a[2] = (num>>16) & 0xFF;
a[1] = (num>>8) & 0xFF;
a[0] = num & 0xFF;

关于在 C 中将 4 个字节的 char 转换为 int32,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8173037/

相关文章:

c - 段错误(核心已转储)

c - 批处理文件在编译C程序时换行

在 tcp 套接字请求中的线程进程上一段时间后连接被拒绝 (c/linux)

c - 编译共享对象时包括版本号

c - C中输出单个字符

c - 理解 c 中一个棘手的 for 循环

c - 为什么需要转换从函数返回的结构?

c - 高效复制内存

c - 为什么这个核函数会进入死循环?

C 程序生成/输出 3 个数字(1 - 20 的任意组合),当相加等于 20 时