如果我有以下UUID结构:
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;
是否有可能将其表示为char?如:
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 :(得分:0)
首先,为了进行序列化,你的结构应该打包。
您可以使用某些预处理程序指令(如__attribute((packed))
)来执行此操作,但这是特定于编译器的,并且您的代码将无法移植。
一旦确定结构已打包,就可以使用union
来交换结构和char数组。