为签名整数交换字节顺序的适当方法是什么?

时间:2013-01-20 14:34:38

标签: objective-c c cocoa endianness foundation

在mac os x上,我一直在使用NSSwap * ToHost系列函数作为无符号整数。

对于大小为8,16,32和64的有符号整数,执行此操作的正确方法是什么?我已经在其他堆栈溢出帖子中看到了ntoh *函数,但它们返回无符号整数。

2 个答案:

答案 0 :(得分:2)

您可以对有符号整数使用相同的方法,只需使用一些转换来安静编译器。

答案 1 :(得分:1)

如果将值转换为无符号整数并返回,则使用这些函数进行签名的endianess交换应该没有问题。 但是:如果要将小端数据显式转换为大端数据,则不应使用这些函数,因为ntoh *函数不会对大端架构执行任何交换。 另一方面,如果您只是想确保本地计算机上的数据转换为big endian,而不管本地计算机的字节顺序如何,这些函数都可以正常运行。