代码之家  ›  专栏  ›  技术社区  ›  Black Magic

C-ntohl用零替换数字

  •  -2
  • Black Magic  · 技术社区  · 12 年前

    在以下关于小Endians和大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 回复  |  直到 12 年前
        1
  •  0
  •   RichieHindle    12 年前

    你需要这样的东西:

    int little = ntohl(*((uint32_t*)s));
    

    否则你只能通过 char ntohl ,这就是您的值被截断的原因。

        2
  •  0
  •   Rudy Velthuis    12 年前

    你混淆了字符串和整数

    uint32_t i = 12345;
    printf("%08X\n", i);    /* 00003039 */
    i = ntohl(i);
    printf("%08X\n", i);    /* either 00003039 or 39300000 */
    

    根据平台的端序,您可以得到相同的输出,也可以得到字节反转的输出。