我在C中工作,并假设我在小端有两个字节:
buffer[0] = 0x01; buffer[1] = 0x02;
如何将上述内容转换为12位数组合?所以在合并之后应该看起来像:
0x0201
答案 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;
所有代码都生成相似的代码。