代码之家  ›  专栏  ›  技术社区  ›  romaric crailox

仅处理无符号值的endianness的函数

c
  •  1
  • romaric crailox  · 技术社区  · 7 年前

    也许我找不到其他函数,但所有处理endianness的函数只接受无符号变量。我的问题是为什么(或者是否有处理endianness和接受符号变量的函数)?

    here here .

    macro ? 宏和上述功能有什么区别?

    1 回复  |  直到 7 年前
        1
  •  2
  •   Ajay Brahmakshatriya    7 年前

    由于endianness是由实现定义的,因此可以安全地假设您所谈论的是一个实现,而不是C标准。查看您发送的链接,我认为您指的是Linux和GNU C编译器。

    signed int unsigned int ,更改endianness并键入pun返回。

    union signed_unsigned {
        signed long a;
        unsinged long b;    
    } converter;
    
    
    signed long to_convert = .... //whatever value
    
    converter.a = to_convert;
    converter.b = htonl(converted.b);
    to_convert = converter.a;
    

    您可以根据需要将其转换为宏或函数。

    正如@underline\u d所建议的,另一种输入pun a的方法 signed long unsigned long reinterpret_cast 而不是C风格的指针转换)。

    您可以使用以下方法实现同样的效果。

    signed long to_convert = .... //whatever value
    unsigned long temp = *(unsinged long*)&to_convert;
    temp = htonl(temp);
    to_convert = *(signed long*)&temp;