我有以下结构:
struct ID
{
UINT id; // range from 0 to 10 000 000
UINT residentNb; // range same as for id (above).
};
struct FullID
{
ID myID;
ID systemID;
};
现在,上面结构ID
中的UINT id
在我的系统中指定了范围。此范围始终从最小 0 到最大 10 000 000。我想将结构 FullID
转换为一个数字,例如 UINT64
,并能够编码/解码数据从它 - myID
和 systemID
(如上面的结构)。有可能吗,最好的方法是什么?当然,如果正确转换有必要,可以将 10 000 000 的限制四舍五入为某个更高的值。
例子
UINT64 encodedID;
(...)
FullID fullID = Decode(encodedID);
(...)
encodedID = Encode(fullID);
最佳答案
我建议使用 union 来避免严格别名优化错误(如果您不知道它是什么,请谷歌搜索严格别名)。
然后,只需使用位掩码和位移位进行编码/解码。远离位域,如果您想要可移植代码,使用它们并不容易。
关于c++ - 从 long 编码/解码整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34431143/