一个CString字符串 发送短信的问题.

mmcanyu 2009-10-28 06:58:20
正在做一个发送短信的软件.
一条短信140个字符,或者70个中文.
函数接受一个CString字符串, 短信超过一条,就要分2条发送.
怎么判断分条发送呢?简单的切成2条,我怕最后一个中文字会被切割成两片。
...全文
123 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
ct025028 2009-11-03
  • 打赏
  • 举报
回复
0xa1是gb2312的,0x80可以兼容gbk
mmcanyu 2009-11-03
  • 打赏
  • 举报
回复
谢谢了,问题解决。
soliddream66的代码貌试没看懂,
按字节读取,如果大于0xA1,就表示连续2个字节组成中文字。
所以,发出去的短信不是139字节就是140字节。

但是还是不明白,到底是0xA1还是0x80呢?
ct025028 2009-10-28
  • 打赏
  • 举报
回复
int PhoneSendMessage(signed char *msg, int length)
{
int i = 0;
int size;
int buffer[141];

size = 0;
while (i < length)
{
if (msg[i] < 0) //连续的两个字节为中文
{
if (size + 2 > 140)
{
//调用发送API
size = 0;
}
buffer[size++] = msg[i++];
buffer[size++] = msg[i++];
}
else
{
if (size + 1 > 140)
{
//调用发送API
size = 0;
}
buffer[size++] = msg[i++];
}
}

if (size > 0)
{
//调用发送API
}

return 0;
}
ct025028 2009-10-28
  • 打赏
  • 举报
回复
ANSI在中文环境下即gb2312编码,如果某字节的最高位为1,则连续的两个字节代表汉字,直接这样判断可以兼容gbk,gb18030的编码。

注意在gb系列编码中,英文占一个字节,中文占两个字节

但我有一点不明白,如果既有英文又有中文,那能发多少个字符呢?
soliddream66 2009-10-28
  • 打赏
  • 举报
回复
上面最后的OrderContent应该是message
至于分两条发送,挺容易扩展的


楼主可以结贴给分了
soliddream66 2009-10-28
  • 打赏
  • 举报
回复
easy

/*
*数据部分超出极限,截取备注
*注意中文,以避免拦腰截断造成乱码
*/
message[140]='\0';
for(int i=140;i>0;i--)
{
if(message[i-1]<0xA1)
{
if(((140-i)%2)==0)
OrderContent[139]='\0';
break;
}
}


mmcanyu 2009-10-28
  • 打赏
  • 举报
回复
不是Unicode,应该是ANSI编码。至少我的程序不是Unicode.
厂家提供的动态连接库,函数传入char指针,字符串长度。

我还是不明白怎么切,一条短信有数字、英文、中文。
按字节读取,如果数到第70个是中文的话,中文字就切成两片了。
ct025028 2009-10-28
  • 打赏
  • 举报
回复
数字符个数吧?这个问题今天刚回答过一次。

首先确定你的短信编辑环境所使用的字符集,现在常用的几种有uf-8,unicode,gb2312...,然后根据这几种的编码规则来计算字符个数,这三种字符集数字符个数都很简单。关键问题是要确定你所使用的字符集。
ezhuyin 2009-10-28
  • 打赏
  • 举报
回复
这要看你短信是如何发送的。纯英文可以使用Unicode编码,也可以使用ANSI编码。但是中文或者中英混合的,只能都用Unicode了。编码完了以后,都可以使用7bit压缩,然后发送。

在Unicode的情况下,CString的GetLength函数返回的是中文和英文混合的长度,不管中文字符英文字符都算一个字符,占2字节。

CString test = L"大家一起来wan";

这个返回长度是8。因此你可以使用一个循环,逐字节读取,然后满70个发送。
ouyh12345 2009-10-28
  • 打赏
  • 举报
回复
做一个结构,标示字符串长、是否分片、第几片等

16,472

社区成员

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

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

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