我有一个64位无符号整数
。其中前两个 MSB 字节包含 0
。如何屏蔽掉前两个 MSB 字节?
uint64 value;
value = 0000 0000 0000 0000 0000 1101 1111 1010 1110 1111 1111 1111 0101
0101 1101 1101;
uint48 answer;
answer = 0000 1101 1111 1010 1110 1111 1111 1111 0101
0101 1101 1101;
在上面的示例中,该值是一个 64 位数字。我希望答案包含除前 2 个字节之外的所有位。因此,我可以将 answer
打包到大小为 6
的字节数组中。我怎样才能在C
中实现这一点?
最佳答案
用 48 个 1 位掩码:0xffffffffffff
uint64_t value = <something>;
uint48_t answer = src & 0xffffffffffff;
但是如果您知道 2 MSB 为零,则无需进行任何屏蔽,只需分配变量即可:
uint48_t answer = value;
要将它们存储在字节数组中,请按适当的字节数移位并使用 0xff
进行掩码以获得单个字节。
uint8_t bytes[6];
for (int i = 0; i < 6; i++) {
bytes[i] = (value >> (40 - 8 * i)) & 0xff;
}
您可以使用原始 64 位值或 48 位值,这适用于至少 6 字节的任何大小。
关于c - 如何屏蔽 64 位数字的前 2 个 MSB 字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56984413/