所以我看到了一些关于如何找到架构的字节顺序的示例。假设我们有一个指向 int 数据类型的整数指针。假设 int 值为 0x010A0B12。在小端架构中,最低有效字节,即 12,将存储在最低内存地址中,对吗?因此 4 字节整数中的最低字节为 12。
现在,开始检查。如果我们声明一个 char 指针 p,并将整数指针类型转换为 char * 并将其存储在 p 中,然后打印 p 的取消引用值,我们将获得有关架构字节顺序的线索。如果是 12,我们就是小端; 01 表示大端。这听起来真的很棒......
int a = 0x010A0B12;
int *i = &a;
char *p = (char*)i;
printf("%d",*p); // prints the decimal equivalent of 12h!
这里有几个问题,真的。由于指针是强类型的,字符指针不应该严格指向 char 数据类型吗?用 %d 打印是怎么回事?难道我们不应该用 %c 打印字符吗?
最佳答案
Since pointers are strongly typed, shouldn't a character pointer strictly point to a char data type?
C 有一条规则,任何指针都可以安全地转换为 char*
和 void*
。因此,将 int*
转换为 char*
是允许的,而且它也是可移植的。该指针将指向您的 int
内部表示的初始字节。
Shouldn't we rather print with
%c
, for character?
另一件事在这里发挥作用:printf
的可变长度参数列表。当您将 char
传递给 printf
的无类型参数时,将应用默认转换:char
转换为 int
.这就是为什么 %d
格式可以很好地接受数字,并按照您的预期打印出来。
你也可以使用 %c
。处理 %c
说明符的代码将参数读取为 int
,然后将其转换为 char
。 0x12
是一个特殊字符,因此您不会看到它的统一打印输出。
关于c - 将 char 指针类型转换为整数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35496014/