也许我找不到其他函数,但是我发现只处理无符号变量的所有处理字节序的函数。我的问题是为什么(或者是否存在处理字节序并接受签名变量的函数)?
也许解决方案是使用这些macro?宏和上面的函数有什么区别?
答案 0 :(得分:2)
由于字节顺序是实现定义的,因此可以安全地假设您正在讨论实现而不是C标准。看看你发送的链接,我想你指的是Linux和GNU C编译器。
然后在此实现下,首先输入signed int
至unsigned 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;