C - ntohl用零替换数字

时间:2014-07-19 13:19:25

标签: c endianness

以下关于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方面经验不多,但在其他语言方面有一些经验。

2 个答案:

答案 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 */

根据平台的字节顺序,您可以获得相同的输出或字节反转的输出。