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;
然后通过串口发送出去的数据就有问题了,大家知道的帮忙看看啊 展开
是什么原因呢?
如果这样不行,该怎么做呢,
我主要的目的是组一个数据包,然后通过串口发送出去,目前如果我这样做
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;
然后通过串口发送出去的数据就有问题了,大家知道的帮忙看看啊 展开
3个回答
展开全部
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类型应该是支持的吧。
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类型应该是支持的吧。
展开全部
0xFE = 254,0x02 = 2
而char是8bit的,如果这里考虑符号位的问题,char只能表示0-128,所以0xFE是编译没法通过
信息提示也很明确,truncation from int to char,即要截断数值。
c++不是很熟悉,没试验,不敢保证正确。
而char是8bit的,如果这里考虑符号位的问题,char只能表示0-128,所以0xFE是编译没法通过
信息提示也很明确,truncation from int to char,即要截断数值。
c++不是很熟悉,没试验,不敢保证正确。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你试下0x0FE,和0x0F5,在汇编中我们常常会忘加前面的0,由于十六进制数的特殊性,编译器有可能会当成别的东西编译
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询