char buff[]单字节数据如何比较?

teleinfor 2019-10-15 10:47:19
char buff[];
if(buff[0] == 0xe3) // -- 这里buff[0]保存的就是0xe3,不过这个比较无论如何不成立,跟踪到此没有进入if(){}分之。

char类型,不能做单字节的hex比较么?如何理解?
...全文
1150 49 打赏 收藏 转发到动态 举报
写回复
用AI写文章
49 条回复
切换为时间正序
请发表友善的回复…
发表回复
advance_coder 2019-11-08
  • 打赏
  • 举报
回复
char有符号,unsigned可以 16进制默认表示的应该是无符号类型。
云深迷离 2019-10-25
  • 打赏
  • 举报
回复
趁机看评论
TLANDLL 2019-10-21
  • 打赏
  • 举报
回复
我也是试了不行啊,咋办
xmuser2012 2019-10-20
  • 打赏
  • 举报
回复
学习中,有收获。
hhyh_1024 2019-10-19
  • 打赏
  • 举报
回复
学习到了,感谢!!!
zyfha123 2019-10-19
  • 打赏
  • 举报
回复
学习了,楼主大牛
A_bengcaca 2019-10-18
  • 打赏
  • 举报
回复
都是大佬啊。。
qq_45767683 2019-10-18
  • 打赏
  • 举报
回复
学习了,楼主大牛
怪力左手 2019-10-17
  • 打赏
  • 举报
回复
char是有符号,改成unsign char就可以了,给的值有符号类型二进制前面一位会拿去当符号用
weixin_45752139 2019-10-16
  • 打赏
  • 举报
回复
Char类型数组的一个索引位不是只能存入一个字节吗
ge_ge_liu 2019-10-16
  • 打赏
  • 举报
回复
比较时保持类型一致,强转下需要对比的数
缄默的飞鹿 2019-10-16
  • 打赏
  • 举报
回复
应该还是可以的
赵4老师 2019-10-16
  • 打赏
  • 举报
回复
凡是不看对应汇编指令讨论单字节数据比较的都是隔靴搔痒。
「已注销」 2019-10-16
  • 打赏
  • 举报
回复
if(buf[0]=='\xe3')
cs_fzt 2019-10-16
  • 打赏
  • 举报
回复
BYTE buff[];
若歌 2019-10-16
  • 打赏
  • 举报
回复
(char[0]&0xFF)==0xE3
teleinfor 2019-10-16
  • 打赏
  • 举报
回复
最基础的东西,也容易被忽略
xiaozan7 2019-10-16
  • 打赏
  • 举报
回复
666666
「已注销」 2019-10-16
  • 打赏
  • 举报
回复
	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"; //输出:相等
weixin_45759149 2019-10-16
  • 打赏
  • 举报
回复
受教了,很不错!
加载更多回复(31)

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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