【问题标题】:Representing UUID struct as char uuid[128]将 UUID 结构表示为 char uuid[128]
【发布时间】:2013-09-26 12:18:28
【问题描述】:

如果我有以下 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;

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

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])

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

【问题讨论】:

    标签: c char byte uuid


    【解决方案1】:

    首先,为了进行序列化,你的结构应该被打包。

    您可以通过使用诸如__attribute((packed)) 之类的预处理器指令来做到这一点,但这是特定于编译器的,您的代码将不可移植。

    一旦你确定你的结构被打包,你可以使用union来交换结构和字符数组。

    【讨论】:

    • 我不明白你的意思
    猜你喜欢
    • 2011-03-28
    • 2022-01-11
    • 2014-10-26
    • 1970-01-01
    • 1970-01-01
    • 2022-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多