2009-07-23 76 views
1

是否有标准接受的方式来通过网络(或文件存储)传输字节交换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 ......在另一端阅读后调用?

谢谢。

回答

3

是的,那是正确的做法。

每个数字(time_low,time_mid,time_hi_and_version)都受字节排序。 node字段不是。 clock_seq_hi_and_reservedclock_seq_low也受字节顺序的限制,但它们每个都是一个字节,所以没关系。

当然,要确保您在两端选择正确的顺序,或者了解另一端的顺序如果您不控制它,则由您决定。微软当然对他们的UUID使用小端。您可以看到微软定义的UUID here

+0

谢谢。我控制两端。我将在内部选择主机排序,因此如果将time_low初始化为little endian上的0x01020304并通过网络发送,则在另一端的big-endian上的值仍将为0x01020304。 – 2009-07-23 13:37:50