通过网络传输UUID和字节
问题描述:
是否有标准接受的方式来通过网络(或文件存储)传输字节交换UUID? (我想发送/存储16个原始字节,而不是将UUID转换为字符串表示形式。)通过网络传输UUID和字节
我认为起初我应该将UUID划分为4个32位整数并在它们每个上调用htonl,但那味道不对。 UUID的具有内部结构(从RFC 4122):
typedef struct {
unsigned32 time_low;
unsigned16 time_mid;
unsigned16 time_hi_and_version;
unsigned8 clock_seq_hi_and_reserved;
unsigned8 clock_seq_low;
byte node[6];
} uuid_t;
难道是正确的事:
...
uuid.time_low = htonl(uuid.time_low);
uuid.time_mid = htons(uuid.time_mid);
uuid.time_hi_and_version = htons(uuid.time_high_and_version);
/* other fields are represented as bytes and shouldn't be swapped */
....
写入之前,然后correpsonding NTOH ......在另一端阅读后调用?
谢谢。
答
是的,那是正确的做法。
每个数字(time_low
,time_mid
,time_hi_and_version
)都受字节排序。 node
字段不是。 clock_seq_hi_and_reserved
和clock_seq_low
也受字节顺序的限制,但它们每个都是一个字节,所以没关系。
当然,要确保您在两端选择正确的顺序,或者了解另一端的顺序如果您不控制它,则由您决定。微软当然对他们的UUID使用小端。您可以看到微软定义的UUID here。
谢谢。我控制两端。我将在内部选择主机排序,因此如果将time_low初始化为little endian上的0x01020304并通过网络发送,则在另一端的big-endian上的值仍将为0x01020304。 – 2009-07-23 13:37:50