C ++使用union来设置64位变量并读取2个32位

时间:2015-04-07 18:53:56

标签: c++ struct unions

`

union {
    uint64_t    entryid;
    uint32_t    entryid[2];
};

entryid = get64bitKey();

storeKeytodb(entryid[0],entryid[1]);
.........
getKeyFromDB(&entrid[0], &entryid[1]);

`

如果在同一主机上设置/获取存储/读取(相同的字节顺序),你们是否看到任何问题

以下是更好的方法

`

union {
    uint64_t    entryid;
    struct {
    uint32_t    entryid1;
    uint32_t    entryid2;
    }entry;

};

`

1 个答案:

答案 0 :(得分:3)

这样做的方法就是:

uint64_t value = ...
uint32_t highword = static_cast<uint32_t>(value >> 32);
uint32_t lowword = static_cast<uint32_t>(value);

逆转(你没有明确要求,但你的代码似乎建议)是这样的:

uint32_t highword = ...
uint32_t lowword = ...
uint64_t value = (static_cast<uint64_t>(highword) << 32) + lowword;

请注意,首先转换高位字然后转换它是很重要的。