2009-07-23 73 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