使用 C++,我需要将两个不同的 ID 组合成一个 16 位整数。然后我需要将这个 16 位整数解码为两个原始 ID 值。
Example:
// Store two integers into one
unsigned short Identifier1 = 12793; //(maximum number 30000)
unsigned short Identifier1 = 5450; //(maximum number 30000)
unsigned short CombinedIDs = 34283; // this is example, I don't know the code for that
// Decode one integer into two
// At this point I only have CombinedIDs value, I need to extract it
// into the two original IDs
unsigned short OriginalIdentifier1 = ...CombinedIDs.. code to get 12793
unsigned short OriginalIdentifier2 = ...CombinedIDs.. code to get 5450
这是不可能的。
假设你的两个标识符可以在范围内[0, 30000]
,有 30000 x 30000 = ~2^30 可能的标识符对。然而,只有 2^16 种可能的 16 位数字。因此,您不可能将标识符对映射到 16 位整数并期望从中恢复标识符。
相反,您可以使用 32 位整数来存储组合,在这种情况下,编码和解码都很简单:
编码:
unsigned short Identifier1 = 12793;
unsigned short Identifier2 = 5450;
unsigned int CombinedIDs = (Identifier1 << 16) | Identifier2;
解码:
unsigned short Identifier1 = CombinedIDs >> 16;
unsigned short Identifier2 = CombinedIDs & 0x0000FFFF
请注意,现在标识符在 [0, 30000] 范围内的限制是不必要的 - 它们可以是任何无符号短值。
EDIT回答你的评论:4 位和 12 位都是可能的。
编码:
unsigned short Identifier1; // 4 bits
unsigned short Identifier2; // 12 bits
unsigned short CombinedIDs = (Identifier1 << 12) | Identifier2;
解码:
unsigned short Identifier1 = CombinedIDs >> 12;
unsigned short Identifier2 = CombinedIDs & 0x0FFF;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)