c - 为什么,当我将 char[] 转换为 int 时,是否会得到按字节反转

标签 c pointers casting

我的代码如下:

char tDat[]={'a','b','c','d','e','f','g','h'};

printf("%d\n",*(int*)tDat);

最终打印的结果是 1684234849。转换成二进制后是 1100100011000110110001001100001。 当二进制再次转换为文本时,

我得到:dcba。

据我了解,我所做的只是采用 tDat,最初是 char*,并将其转换为 int*,对我来说,这意味着取消引用现在将读取 4 个连续字节而不是 1 个。然而,在取消引用时,我得到一个与我预期相反的整数。有人能解释一下为什么我没有再次得到 abcd 吗?

最佳答案

这是因为你碰巧在一台小端的机器上。英特尔处理器是。

这意味着整数存储在内存中时,最低有效字节在前。在您的示例中,LSB 将是“a”,然后是“b”,然后是“c”,MSB 将是“d”。这对应于按照我们的数字约定编写时看起来像“dcba”的 int。

关于c - 为什么,当我将 char[] 转换为 int 时,是否会得到按字节反转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18668117/

相关文章:

检查C中的输入类型

c - C 的测试框架

c++ - 为什么 vector 的随机访问迭代器与指针不同,给出相同的内存地址?

C# 释放 IntPtr 引用的内存

swift - 将解析指针设置为 PFUser 以外的类

c++ - 如何将浮点文字转换为相同位模式的无符号整数

pointers - 如何将接口(interface)实现指针转换为接口(interface)指针?

c - 为accept()返回的客户端套接字设置sockopt

c - 说明符 %[^s] 的用途是什么?

java - 如何在 C 中执行此操作(来自 Java)