ASCII 碼最高位為 0,7BIT 壓縮編碼利用這一空位存儲數據,可將 8 字節 ASCII 壓縮為 7 字節。本文提供兩種場景下的長度計算 C 實現。
if (nSrc % 7 == 0) {
if (*(pSrc + nSrc - 1) >> 1)
nLength = (nSrc / 7) * 8;
else
nLength = (nSrc / 7) * 8 - 1;
} else {
if (*(pSrc + nSrc - 1) >> (8 - nSrc % 7))
nLength = (nSrc / 7) * 8 + nSrc % 7 + 1;
else
nLength = (nSrc / 7) * 8 + nSrc % 7;
}
原理:編碼後長度若是 7 的倍數,原始長度可能是 8 的倍數或 8n-1。通過檢查最後一字節最高位是否有殘留數據來判斷。非 7 倍數時同理,移位位數不同。
if (nSrc % 8 == 0) {
nLength = (nSrc / 8) * 7;
} else {
if (*(pSrc + nSrc - 1) >> (nSrc % 8 - 1))
nLength = (nSrc / 8) * 7 + ((nSrc % 8) * 7) / 8 + 1;
else
nLength = (nSrc / 8) * 7 + ((nSrc % 8) * 7) / 8;
}
應用場景:短信發送時,若內容全為 ASCII,採用 7BIT 壓縮可將 160 字符壓縮為 140 字節傳輸。