天天看點

計算UCS2編碼的長度以及注意事項(C程式設計實作)

【小蝸牛清心之作】

UCS2編碼在發送短信時候經常用到,如果發送的是純ASCII字元的短信,采用7BIT壓縮編碼最大一次可以發送160個ASCII,但是如果想發送中文的話,隻能采用UCS2編碼了,一條短信最大可以發送70個中文(或70個中英文、數字混合短信,比如,如果有1個中文,後面可以再有69個中文,或者69個英文、數字)。

中文、普通ASCII的UCS2編碼都是要占用兩個位元組,但是,ASCII的UCS2編碼有一個位元組為0x0,導緻無法用 strlen() 函數來計算UCS2編碼的長度,我是這麼計算UCS2編碼長度的:

// 計算出UCS2編碼的長度并傳回長度

int ucs2Count(const unsigned char *pSrc)

{

    int i;

    for (i = 0; pSrc[i]+pSrc[i+1] != 0; i += 2);

    //注意上面有個";"

    return i;

}

pSrc這裡存放着已經UCS2編碼好的位元組串,這裡需要注意的是,我們必須有 n*2+2 位元組的空間來存儲UCS2位元組串,這裡的 n 是需要進行UCS2編碼的字元個數,中文當作一個字元,英文字母、數字也是一個字元。并且,我們在編碼轉換的時候,需要先把 n*2+2 位元組的空間清零,可以使用函數 bzero(pSrc, n*2+2) 或者 memset(pSrc, 0, n*2+2)。

溫馨提示一下,在Linux下各種編碼轉換,可以使用 iconv() 函數哦~

------------------------------------------------------------------------------------------

趙小蝸牛

QQ: 755721501

E-mail: [email][email protected][/email]

在不斷奉獻中謀求生存發展、打造自己的優秀品質,用人性最本質最動人的一面“營銷”自己!

繼續閱讀