短信编码从8bit转到7bit
不知为什么,使用AT指令命令设备(测试设备USB Modem : HUAWEI E3131)发送短信时,使用Unicode和7bit编码方式都能成功,但是8bit(就是ASCII)方式不成功。当需要发送的短信只包含标准字符并且使用unicode可能超过70个字符时,7bit编码就会被采用以增加短信长度限制到140个字符。
原理图出自于这里
C++(Qt)代码如下
//Content是一个QString,如"AAB1E78653"
int iLen = Content.length();
BYTE *pucDate = new BYTE[iLen];
for(int i = 0; i < iLen;i++) {
pucDate[i] = Content.at(i).toLatin1();
}
//8bit(ascii)转7bit
BYTE *pucDate7 = new BYTE[iLen];
int lackNumber = 1;
int bit7pos = 0;
for(int i = 0;i < iLen;i++) {
//7个8bit数据=8个7bit数据个为一个循环
if(8 == lackNumber) {
lackNumber = 1;
} else {
if(i + 1 == iLen)
{
pucDate7[bit7pos] = pucDate[i];
} else {
pucDate7[bit7pos] = ((pucDate[i + 1] & ((BYTE)qPow(2, lackNumber) - 1)) * (BYTE)qPow(2, 8 - lackNumber) + pucDate[i]);
pucDate[i + 1] = pucDate[i + 1] / (BYTE)qPow(2, lackNumber);
}
lackNumber++;
bit7pos++;
}
}