我的 UUID 结构如下:
struct UUID_FIELDS
{
uint32_t time_low;
uint16_t time_mid;
uint16_t time_hi_and_version;
uint8_t clock_seq_hi_and_reserved;
uint8_t clock_seq_low;
uint8_t node[6];
};
我有一些函数可以沿32位边界进行交换和一个可以沿16位边界进行交换的
swap function
。我试图在time_low
上调用swap32()
,在time_mid
和time_hi_and_version
上调用swap16()
。我认为我不需要交换其余字段的字节,因为其中两个字段是8位字段,并且我已经读到uuid的节点部分不会改变。这里是一个相关的链接。问题在于当我完成交换后,打印出来的uuid与在转换前的小端字节序的uuid不匹配。
从小端转换为大端,正确的方法是什么?转换后的uuid应该与原始的uuid匹配吗?请遵循RFC-4122标准。
time_low
、time_mid
和time_high_and_version
上的字节才能正确使用它们。 - kmdrekohtonl
和htons
而不是无条件地进行字节交换,这样你就不会在已经是大端序的机器上执行交换。 - ShadowRanger