2013-09-26 39 views
1

如果我有以下结构UUID:代表UUID结构为char UUID [128]

typedef unsigned long unsigned32; 
typedef unsigned short unsigned16; 
typedef unsigned char unsigned8; 
typedef unsigned char byte; 

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; 

是否可以将其表示为一个字符?如:

unsigned char uuid[128]; 

如果是这样的话,我将如何处理类似的值:

uuid.time_low = htonl(uuid.time_low);      //uuid[0...32] = htonl(uuid[0...32])? 
uuid.time_mid = htons(uuid.time_mid);      //uuid[33...48] = htonl(uuid[33...48])? 
uuid.time_hi_and_version = htons(uuid.time_hi_and_version); //uuid[49...64] = htonl(uuid[49...64])? 

所以我的问题是,我将如何真正落实在实际的代码下面的例子:

uuid[0...32] = htonl(uuid[0...32]) 

我在正确的轨道上吗?任何建议都非常感谢!

回答

0

首先,为了做这个序列化,你的结构应该打包。

你可以通过使用一些像__attribute((packed))这样的预处理器指令来做到这一点,但这是编译器特定的,你的代码将不可移植。

一旦您确定您的结构已打包,您可以使用union来交换结构和char数组。

+0

我不明白你的意思 – TomSelleck