以下关于Little和Big Endians的节目:
char *s = "1234";
printf("%08X\n",*(int *)s); //big endian
int little = ntohl(*s);
printf("%08X\n",little);//Little endian
我得到以下输出:
34333231
31000000
第二行应该是第一行的相反顺序。我究竟做错了什么? 我在C方面经验不多,但在其他语言方面有一些经验。
答案 0 :(得分:0)
你需要这样的东西:
int little = ntohl(*((uint32_t*)s));
否则您只会将char
传递给ntohl
,这就是您的值被截断的原因。
答案 1 :(得分:0)
你混淆了字符串和整数
uint32_t i = 12345;
printf("%08X\n", i); /* 00003039 */
i = ntohl(i);
printf("%08X\n", i); /* either 00003039 or 39300000 */
根据平台的字节顺序,您可以获得相同的输出或字节反转的输出。