将2个字节转换成12位数字?

Convert 2 bytes into 12 bit number?

我在 C 中工作,假设我有 2 个字节的小端:

buffer[0] = 0x01; buffer[1] = 0x02; 

如何将上面的转换成一个组合的 12 位数字?所以合并后应该是这样的:

0x0201

3字节(24位)个数:

number = ((buffer[2] & 0x0F) << 16) | ((buffer[1] & 0x0F) << 8) | buffer[0];

2字节(16位)个数:

number = ((buffer[2] & 0x0F) << 8) | ((buffer[1] & 0x0F) << 4) | buffer[0];

这是一个16位数字。每个字节是8位。

int i = (buffer[0] & 0xFF) | (buffer[1] << 8);

如果你想要 12 位那么这个

int i = (buffer[0] & 0xFF) | ((buffer[1] & 0x0F) << 8);

转换回缓冲区

char buffer[2];
buffer[0] = i & 0xFF;
buffer[1] = (i >> 8) & 0x0F;

如果 buffer[] 是有符号类型,则使用

int twelve_bit1 = ((buffer[1] & 0xF) << 8) | (buffer[0] & 0xFF);

int twelve_bit2 = ((buffer[1] & 0xF) << 8) | (unsigned char) buffer[0];

int twelve_bit3 = ((buffer[1] & 15) * 256) | buffer[0] & 255;

都生成相似的代码。