這段代碼是我在用結合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;'但是它不應該解決你的問題。 (呵呵,因爲問題出在你的=運算符上。) –