将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;
都生成相似的代码。
我在 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;
都生成相似的代码。