程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 7BIT壓縮編碼長度計算方法(C編程實現)

7BIT壓縮編碼長度計算方法(C編程實現)

編輯:關於C語言

小蝸牛發飙之作   大家都知道,ASCII(不包括擴展ASCII)的最高位是0,所以,我們可以利用這一空位來存儲數據,“7BIT壓縮編碼”就是這麼做的。關於7BIT壓縮編碼的詳細算法,可以在網上找到Simple)。這裡,我說一下自己的一種關於計算7BIT編碼長度的C語言實現方法。應該有更好的方法啦~)   1。如果給出已經7BIT編碼的字符串,在不解碼的情況下,計算出解碼後的長度,也就是源碼(ASCII)的長度。   pSrc -- 已經編碼的字符串地址
nSrc -- 通過函數strlen(pSrc)計算出來的長度
nLength -- 原編碼的長度(就是我們想知道的結果)        
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的倍數,我們都知道,7BIT壓縮編碼可以將8字節ASCII壓縮成7字節。如果編碼後的長度恰好是7的倍數,那麼就“很可能"源碼是8的倍數長度。這裡只能說是“很可能”,因為 8*n-1 個ASCII編碼後也會占用 7*n 個字節也有可能是 7*n-1 字節)。也就是說,160個ASCII編碼後為140字節,159個ASCII編碼後也為140字節或者139字節),那麼現在我們知道編碼後是140字節,原編碼ASCII到底是160個,還是159個呢?
    if (*(pSrc+nSrc-1) >> 1) 做出了判斷,如果結果為真,那麼就是 8*n 個原編碼,如果為假,那麼就是 8*n-1 個原編碼。這裡,相信大家稍微思考一下就明白了;)嘻嘻,有不明白的,email問我啦~
   
    如果編碼後的長度,不是7的倍數,那麼對最後一位的移位判斷稍微復雜一些,道理是和上面一樣的,只是移位的位數不一樣而已。計算長度的時候,先取出8位ASCII的整數倍(nSrc/7)*8,然後再取余數nSrc%7,然後根據對最後一位的移位判斷結果,判斷到底是否還得加一位。(這是為什麼呢?為什麼不是和上面7的整數被時的減一位呢?哈哈~思考一下就知道了)
    2。如果給出原ASCII字符串,在不編碼的情況下,計算出7BIT編碼後的長度。   pSrc -- 源ASCII字符串地址
nSrc -- 通過函數strlen(pSrc)計算出來的長度
nLength -- 7BIT編碼後的長度(就是我們想知道的結果)   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;
}
  解釋:
    如果長度是8的整數倍,那非常簡單,如果不是呢,那麼又得對最後一位進行移位判斷了,所移位的位數為 nSrc%8-1 位,如果移位後,還“剩”數據,那麼就得多加一位了:)
   
好了,就說到這裡,如果有什麼不明白,或者發現我有不對的地方,或者有更好的計算方法,可以一起討論哦!   順便提一下,7BIT編碼在發送短信時,如果短信內容都是ASCII,那麼將會采用7BIT壓縮編碼,將160個ASCII壓縮為140字節進行傳輸。:)   ------------------------------------------------------------------------------------------ 趙小蝸牛 QQ: 755721501 E-mail: [email protected] 在不斷奉獻中謀求生存發展、打造自己的優秀品質,用人性最本質最動人的一面“營銷”自己!

本文出自 “小蝸牛技術之家” 博客,請務必保留此出處http://snailwarrior.blog.51cto.com/680306/153333

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved