因为工作原因,需要对数据库中的数据读取。然后使用socket将内容发送出现。我们大家都知道一般自定义的协议,都会规定发送的最大长度。如果你使用CString::Mid函数,对字符串进行截取。如果你的没有使用程序进行扫描,贸然进行截取,可能会出现乱码。因为如果你的内容中含有中英文,而一个汉字需要使用两个字节进行存储,在这种情况下,你最好的做法,就是定义一个函数,你传递过去你需要传递参数,返回你截取的长度。这样就不会将汉字截成乱码了,其实也是雕虫小计。代码如下:
- int COracleDal::getReadChineseAsciiLength(CString str, int startIndex, int maxLength)
- {
- int result = 0;
- int istart = startIndex;
- int iasciivalue = 0;
- int strlength = str.GetLength();
- while(istart < strlength)
- {
- CString cc = str.Mid(istart,1);
- char *p = cc.GetBuffer();
- iasciivalue = (int)(*p); //读取一个字符,获取该字符串的ASCII值
- cc.ReleaseBuffer();
- if(iasciivalue < 0) //当读取字符的ascii的值为负数,则当前位置读取的字符为汉字,
- { //则重新进行对汉字读取,则一次读取两个字符。
- if(result + 2 > maxLength)
- break;
- cc = str.Mid(istart,2);
- p = cc.GetBuffer();
- iasciivalue = (int)(*p);
- cc.ReleaseBuffer();
- istart += 2;
- result += 2;
- }
- else
- {
- ++istart;
- ++result;
- if(result + 1 > maxLength)
- break;
- }
- }
- return result;
- }
阅读(3245) | 评论(0) | 转发(0) |