c - 仅针对无符号值处理字节顺序的函数

标签 c

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

我找到的函数列表:herehere .

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

最佳答案

由于字节顺序是实现定义的,因此可以安全地假设您在谈论实现而不是 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;

关于c - 仅针对无符号值处理字节顺序的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45484396/

相关文章:

c - C 中一元加号 (+) 运算符的用途是什么?

解决 make/C 代码中的循环引用的正确方法?

c - fscanf() 接受输入

C:指向二维数组的指针

c - 简单的单向链表问题 - 节点值不显示

c - 尝试在 c 中制作倒数计时器时没有输出

c - 如何正确释放 malloc 的结构?

c - 在 C 中,将指针强制转换为 struct ao void* 的指针是怎么回事?

c - 结构体和链表(C)

C RegEnumKeyExA 接收 ERROR_MORE_DATA 的问题