【发布时间】:2015-03-02 11:24:43
【问题描述】:
我需要将我在运行我的代码的任意机器上收到的 8 个字节按大端顺序排列。我相信我可以为此使用htobe64 函数,但我不确定它的可移植性——即endian.h 在编译我的代码时跨不同机器架构和操作系统的可用性。这是一种安全的(即便携的)使用方法还是使用其他方法更好?
【问题讨论】:
标签: c
我需要将我在运行我的代码的任意机器上收到的 8 个字节按大端顺序排列。我相信我可以为此使用htobe64 函数,但我不确定它的可移植性——即endian.h 在编译我的代码时跨不同机器架构和操作系统的可用性。这是一种安全的(即便携的)使用方法还是使用其他方法更好?
【问题讨论】:
标签: c
请使用以下可移植的方法:
#include <stdint.h>
void write64be(unsigned char out[8], uint64_t in)
{
out[0] = in >> 56 & 0xff;
out[1] = in >> 48 & 0xff;
out[2] = in >> 40 & 0xff;
out[3] = in >> 32 & 0xff;
out[4] = in >> 24 & 0xff;
out[5] = in >> 16 & 0xff;
out[6] = in >> 8 & 0xff;
out[7] = in >> 0 & 0xff;
}
【讨论】:
endian.h 本身的可移植性。
endian.h 不可移植,在数字变量中保留“字节序”数字通常是个坏主意。像上面的函数一样使用一堆函数。