69,369
社区成员
发帖
与我相关
我的任务
分享
char buff[1] = { 0xe3 };
cout << CHAR_MIN << "~" << CHAR_MAX << "\n"; //获取当前环境char类型取值范围. 我的输出-128~127(C标准char类型与不同编译环境相关).
cout << 0xe3 << "\n"; //输出227
cout << int(buff[0]) << "\n"; //输出-29
cout << int(char(0xe3)) << "\n"; //输出-29
/*虽然buff[0]保存0xe3,但是0xe3的数值不是char类型的取值范围,所以在编译或运行的时候,自动截断为char类型的取值范围。
看输出结果明显知道:227-(-29)=256,即0xe3放进buff[]时减少了256.因为char只能容纳256个字符(-128~127).只要大于CHAR_MAX,就会一直减256,直到减到在范围内,只要小于CHAR_MIN,就会一直加256,直到加到在范围内.
既然你已经确定传过来的接口数据是char类型,那么根据 0xe3 > 127 可以判断对方编译环境char取值范围为(0~255),也就我当前环境的unsigned char类型.
如要进行比较,要么要进行转换,要么进行运算.
*/
if (buff[0] == 0xe3-256)
cout << "相等" << "\n"; //输出:相等
if (buff[0] == char(0xe3))
cout << "相等" << "\n"; //输出:相等
typedef unsigned char u; //定义一个类型,"unsigned char"不方便大量写,简洁一个"u"代表它.
if (u(buff[0]) == 0xe3)
cout << "相等" << "\n"; //输出:相等