我们说我有一个缓冲区,我需要得到6位。缓冲区中一个元素的四个位和下一个元素的两个位。我想我知道如何从每个元素访问正确的位,但我不知道如何组合这些位。这是一些示例代码。
SELECT d.name
FROM users u
JOIN d IN u.devices
WHERE ST_DISTANCE(d.currentLocation, <user location>) < 500
答案 0 :(得分:2)
我不确定你想要将这些位组合在一起,但也许你想要这样的东西:
unsigned char lastFourBits = (buffer[i] >> 4) & 0xF; // 0000xxxx
unsigned char firstTwoBits = (buffer[i+1] & 0x3); // 000000yy
unsigned char combined = (lastFourBits << 2) | firstTwoBits; // 00xxxxyy
或者:
unsigned char combined = (firstTwoBits << 4) | lastFourBits; // 00yyxxxx
答案 1 :(得分:1)
您在此处执行的位移(buffer[i] >> 4)
实际上正在丢失您想要的4位。 (buffer[i] & 0xF)
将捕获第一个字节的低位四位。对于第二个字节,您希望两个高位[{1}}捕获这些字节。
连接:
(buffer[i+1] & 0xC0)
示例:如果数据流为0xABCD或1010 1011 1100 1101,则此等式捕获101111。