仅处理无符号值的字节序的函数

时间:2017-08-03 12:36:14

标签: c

也许我找不到其他函数,但是我发现只处理无符号变量的所有处理字节序的函数。我的问题是为什么(或者是否存在处理字节序并接受签名变量的函数)?

我找到的功能列表:herehere

也许解决方案是使用这些macro?宏和上面的函数有什么区别?

1 个答案:

答案 0 :(得分:2)

由于字节顺序是实现定义的,因此可以安全地假设您正在讨论实现而不是C标准。看看你发送的链接,我想你指的是Linux和GNU C编译器。

然后在此实现下,首先输入signed intunsigned int的双关语,更改字节顺序并输入惩罚值是安全的。

以下是一种方法

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;

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

正如@underscore_d所建议的那样,将signed long输入到unsigned long(和返回)的另一种方式是使用指针强制转换。这在C和C ++中都有效(尽管在C ++中你应该使用reinterpret_cast而不是C风格的指针转换)。

您可以使用以下方式实现相同目的。

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