如何将UUID转换为大端?

seb*_*ern 7 c++ uuid endianness

我的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];                   

};
Run Code Online (Sandbox Code Playgroud)

我有swap沿32位边界的功能和swap function沿16位边界交换的功能.我已经打过电话swap32()time_low,并swap16()time_midtime_hi_and_version.我不相信我需要为其余字段交换字节,因为其中两个是8位字段,我已经读过uuid的节点部分没有改变.这是该参考的链接.

问题是当我完成交换时,打印的uuid与转换前的小端的uuid不匹配.

什么是转换之后的UUID正确的方式RFC-4122标准little endianbig endian.当转换时,uuids应该匹配吗?

Kaz*_*Kaz 4

关于:

更新:以小端开始 uuid:

446831D3-FBA1-477B-BB07-CB067B00E86B
Run Code Online (Sandbox Code Playgroud)

正确交换必要字段的结果:

FBA1477B-31D3-4468-6BE8-007B06CB07BB
Run Code Online (Sandbox Code Playgroud)

这看起来非常错误。我们可以推断,如果交换是正确的并且仅影响 32 位和 16 位字段,那么在不交换必要字段的情况下,它将是这样的:

Original: 446831D3-FBA1-477B-BB07-CB067B00E86B
           |       _______/   |       _______/
            \____ /_______     \____ /______
            _____/        \    _____/       \
           /               |  /              |
Received: 7B47A1FB-D331-6844-6BE8-007B06CB07BB   # "de-swapped".
Run Code Online (Sandbox Code Playgroud)

您似乎在管道中某处进行了 64 位单元内的字节交换。甚至字节数组也被反转,这表明它可能作为 64 位加载的一部分加载到某个位置,该加载受 swap64 操作的影响。