我有以下结构:
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;
};
现在,上面结构UINT id
中的ID
已在我的系统中指定了范围。此范围始终从最小0到最大10 000 000.我想将struct FullID
转换为一个数字UINT64
,例如,并且能够对其中的数据进行编码/解码 - {{1 }和myID
(如上面的结构)。它有可能,最好的方法是什么?当然,如果这对于正确的转换是必要的话,可以将10 000 000限制四舍五入到更高的值。
systemID
答案 0 :(得分:1)
我建议使用联合来避免严格的别名优化错误(如果您不知道它是什么,谷歌会严格别名)。
然后,只需使用位掩码和位移进行编码/解码。远离位域,如果你想要便携式代码,它们就不容易使用。