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

时间:2015-11-17 22:23:33

标签: c byte bit-shift

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

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

如何将上述内容转换为12位数组合?所以在合并之后应该看起来像:

0x0201

3 个答案:

答案 0 :(得分:4)

这是一个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;

答案 1 :(得分:2)

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];

答案 2 :(得分:1)

如果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;

所有代码都生成相似的代码。