MFC 中对于CString的赋值问题,急!

我开始这样做,CStrings_2=0x02;编译没有警告,也没错误,但是如果我这样做:CStrings_3=0xFE;,编译就会有警告:warningC4305:'ar... 我开始这样做,CString s_2=0x02;编译没有警告,也没错误,但是如果我这样做:CString s_3=0xFE; ,编译就会有警告:warning C4305: 'argument' : truncation from 'const int' to 'char'
是什么原因呢?
如果这样不行,该怎么做呢,
我主要的目的是组一个数据包,然后通过串口发送出去,目前如果我这样做
CString s_1=0x10;
CString s_2=0x02;
CString s_3=0x33;
CString s_4=0x33;
CString s_5=0x10;
CString s_6=0x03;
CString s_7;
s_7=s_1+s_2+s_3+s_4+s_5+s_6;
这样通过串口函数 m_ctrlComm.SetOutput(COleVariant(s_7)); 发送出去没有问题,后来我又做了另外一个就会出问题:
CString s_1=0x10;
CString s_2=0x02;
CString s_3=0xFE; //编译时会有警告truncation from 'const int'to 'char'
CString s_4=0x02;
CString s_5=0x08;
CString s_6=m_TID; //编辑框中的内容
CString s_8=0xF5;
//编译时会有警告truncation from 'const int'to 'char'
CString s_9=0x10;
CString s_10=0x03;
CString s_7;
s_7=s_1+s_2+s_3+s_4+s_5+s_6+s_8+s_9+s_10;
然后通过串口发送出去的数据就有问题了,大家知道的帮忙看看啊
展开
 我来答
liuhua1433
2010-07-11 · TA获得超过173个赞
知道答主
回答量:79
采纳率:0%
帮助的人:48.5万
展开全部
0xFE大于128就是一个负数,虽然char与unsinged char在内存中的存储是一样的但不代表CString对这两者的处理是一样的。我在VC2008里测试了一下
CString s_3=0xFE;根本通不过编译。而换成下面的语句
unsigned char c3=0xFE;
CString s_3;
s_3 += c3;
发现s_3根本就没有内容,只要c3不大于128,s_3就有内容,这应该就是你的问题所在,
所以建议你不要使用CString,最好定义自己的类来实现字符串连接,重载下"+"就能实现串加了。不过我觉得你这个用BYTE/unsinged char类型的数组要更好。但不知道你的控件接口都支持什么类型,VARIANT类型应该是支持的吧。
当年杂货铺
2010-07-11 · 超过37用户采纳过TA的回答
知道小有建树答主
回答量:105
采纳率:0%
帮助的人:0
展开全部
0xFE = 254,0x02 = 2
而char是8bit的,如果这里考虑符号位的问题,char只能表示0-128,所以0xFE是编译没法通过
信息提示也很明确,truncation from int to char,即要截断数值。

c++不是很熟悉,没试验,不敢保证正确。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友c58929f
2010-07-11 · 超过22用户采纳过TA的回答
知道答主
回答量:100
采纳率:0%
帮助的人:79.6万
展开全部
你试下0x0FE,和0x0F5,在汇编中我们常常会忘加前面的0,由于十六进制数的特殊性,编译器有可能会当成别的东西编译
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式