MFC中使用GPRS模块发送中文短信

xuebatiantang 2017-08-02 03:34:47
现在在做MFC中使用GPRS发送中文报警短信的模块,不想用PDU,而且工程必须是Unicode编码,现在在多字节工程下使用:
"AT+CMGF=1\x0D";
"AT+CSMP=17,167,2,25\x0D";
"AT+CSCS=\"UCS2\"\x0D";
"AT+CMGS=\"XXXXXXXXXXXXXXXXXXXXXXXXXXXX\"\x0D";
“转换为Unicode之后的待发送报警内容”
"\x1A";
使用如上的指令已经可以发送短信,正常接收。但是转换工程为Unicode之后,就无法接收到短信,请问一下Unicode工程下应该怎么编写代码,所有的at指令都需要转换为多字节吗,手机号码和短信内容应该如何转换,谢谢。

...全文
224 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2017-08-03
  • 打赏
  • 举报
回复
电脑内存或文件内容或传输内容只是一个一维二进制字节数组及其对应的二进制地址; 人脑才将电脑内存或文件内容或传输内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……
void HexDump(char *buf,int len,int addr) {
    int i,j,k;
    char binstr[80];

    for (i=0;i<len;i++) {
        if (0==(i%16)) {
            sprintf(binstr,"%08x -",i+addr);
            sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);
        } else if (15==(i%16)) {
            sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);
            sprintf(binstr,"%s  ",binstr);
            for (j=i-15;j<=i;j++) {
                sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.');
            }
            printf("%s\n",binstr);
        } else {
            sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);
        }
    }
    if (0!=(i%16)) {
        k=16-(i%16);
        for (j=0;j<k;j++) {
            sprintf(binstr,"%s   ",binstr);
        }
        sprintf(binstr,"%s  ",binstr);
        k=16-k;
        for (j=i-k;j<i;j++) {
            sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.');
        }
        printf("%s\n",binstr);
    }
}
worldy 2017-08-02
  • 打赏
  • 举报
回复
引用 4 楼 xuebatiantang 的回复:
[quote=引用 1 楼 worldy 的回复:] 发送端是什么编码,接收端将编码方式转换为Uincode (MultibteToWidechar)
发送端是我自己写的MFC程序,测试报警之后将报警信息以短信方式发送给指定的接收人员,发送端是Unicode编码[/quote] 你应该弄清楚,接收端是什么编码格式,通常推测应该是MultiByte,你使用WidecharToMultibyte转换,再发送,试试
zgl7903 2017-08-02
  • 打赏
  • 举报
回复
如果VS的版本支持 CStringA 的话, 可以直接使用, CStringA strA; strA = xxx; (UNICODE/多字节字符串都可以) 或者可以 用 WideCharToMultiByte API 函数
xuebatiantang 2017-08-02
  • 打赏
  • 举报
回复
引用 3 楼 zgl7903 的回复:
用 CHAR ,LPCSTR, CStringA 等限制为多字节
是将AT指令限制为多字节吗,那么手机号码和短信内容应该如何限制和转换,谢谢
xuebatiantang 2017-08-02
  • 打赏
  • 举报
回复
引用 2 楼 chengbar 的回复:
AT 指令多字节编码,短信内容unicode编码
也就是说我的 "AT+CMGF=1\x0D"; "AT+CSMP=17,167,2,25\x0D"; "AT+CSCS=\"UCS2\"\x0D"; 这几条指令需要通过WideCharToMultiByte转换为多字节编码发送,是这样吗? 手机号这条AT指令"AT+CMGS=\"XXXXXXXXXXXXXXXXXXXXXXXXXXXX\"\x0D";中间的手机号还需要进行Unicode转换吗,还是直接使用比如说13211111111这个号码,再者短信内容还需要转换为Unicode编码吗(工程为Unicode),如果需要转换应该怎么转? 第一次接触GPRS问题有点多,见谅
xuebatiantang 2017-08-02
  • 打赏
  • 举报
回复
引用 1 楼 worldy 的回复:
发送端是什么编码,接收端将编码方式转换为Uincode (MultibteToWidechar)
发送端是我自己写的MFC程序,测试报警之后将报警信息以短信方式发送给指定的接收人员,发送端是Unicode编码
zgl7903 2017-08-02
  • 打赏
  • 举报
回复
用 CHAR ,LPCSTR, CStringA 等限制为多字节
sevancheng 2017-08-02
  • 打赏
  • 举报
回复
AT 指令多字节编码,短信内容unicode编码
worldy 2017-08-02
  • 打赏
  • 举报
回复
发送端是什么编码,接收端将编码方式转换为Uincode (MultibteToWidechar)

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧