这段代码是我在用结合4 2位值(无符号的字符,但他们只保持0-3值)到1个单无符号字符值如何将4个2位值合并为1个8位值?
unsigned char nibble = 0;
nibble = (nibble & 0x03) | (output[i] & 0x03);
nibble = (nibble & 0x0C) | (output[i+1] & 0x03) << 2);
nibble = (nibble & 0x30) | (output[i+2] & 0x03) << 4);
nibble = (nibble & 0xC0) | (output[i+3] & 0x03) << 6);
它产生了不正确的值以外的所有00 00 00 00(它通常对2组不同的2位值产生相同的结果)。
我很困惑,因为上面的代码是this code的编辑,它可以将2个4位值合并为1个字节,所以为什么我的版本没有将4个2位值合并为1个字节?
char byte;
byte = (byte & 0xF0) | (nibble1 & 0xF); // write low quartet
byte = (byte & 0x0F) | ((nibble2 & 0xF) << 4); // write high quartet
我试图改变×03/0x0C /的0x30 /将0xC0到将0xC0 /的0x30/0x0C/0x03时,仍然是错误的。相同更改& 0x03到& 0xC0。
Personnally,我不会打扰做面具的事情,只需直接添加值。代码较大,但如果没有编译器进行大量优化,速度会更快。 第一行:'nibble | = output [i];'第二行:'nibble << = 2;'但是它不应该解决你的问题。 (呵呵,因为问题出在你的=运算符上。) –