gpt4 book ai didi

c++ - 如何将 UUID 转换为大端?

转载 作者:可可西里 更新时间:2023-11-01 18:31:05 27 4
gpt4 key购买 nike

我的 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 位边界交换的交换函数。我已尝试在 time_low 上调用 swap32() 并在 time_midtime_hi_and_version swap16()。我认为我不需要为其余字段交换字节,因为其中两个是 8 位字段,而且我已经读到 uuid 的节点部分不会改变。 Here is a link for that reference.

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

将遵循 RFC-4122 标准 的 uuid 从 little endian 转换为 big endian 的正确方法是什么。转换后 uuid 应该匹配吗?

最佳答案

回复:

Update: Starting uuid in little endian:

446831D3-FBA1-477B-BB07-CB067B00E86B

Result from correctly swapping necessary fields:

FBA1477B-31D3-4468-6BE8-007B06CB07BB

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

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

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

关于c++ - 如何将 UUID 转换为大端?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37711358/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com