有关0x00与0xFF的问题

tljjysj 2005-10-01 04:43:09
我遇到一个这样的问题,百思不得其解.请看下面的程序.

unsigned char sReceives[300];
//sReceives是从串口收到的字符串.比如收到的字符串中有:0x00,0x00,0xFF,0x00
if (sReceives[0]==0x00)
iMemory_AI[0]=0x00;
elseif(sReceives[0]==0xFF)
iMemory_AI[0]=0x01;
else
iMemory_AI[0]=0x01;

现在的问题是:0x00和0xFF的值会相等吗?这样的判断会有用吗?
...全文
4313 23 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
K 2005-10-16
  • 打赏
  • 举报
回复
gz
ruiding 2005-10-16
  • 打赏
  • 举报
回复
关注。。。。
tljjysj 2005-10-15
  • 打赏
  • 举报
回复
我觉得问题还是出在源头,就是收到的东西根本就不对.也许是串口通信错误.不知哪位老兄用过ICPCON的产品?对此类产品了解?
tljjysj 2005-10-15
  • 打赏
  • 举报
回复
楼上兄所言,我觉得不妥.如果他们的基值sRecevies[0]都是相等的,不管你怎么与/或则都是徒劳的.
yeehya 2005-10-15
  • 打赏
  • 举报
回复
你的做法应该是可以的.
因为你用的unsigned char ...如果你用char就不准确了.
这样的判断用与/或来做,怎么样楼主.
if (sReceives[0] & 0xFF == 0x00)
iMemory_AI[0]=0x00;
elseif(sReceives[0]| 0x00 == 0xFF)
iMemory_AI[0]=0x01;
else

不知道这样做你会不会觉得放心些.??
qianyi_chun 2005-10-15
  • 打赏
  • 举报
回复
unsigned 时他们是相等,
如果是有符号时,0x00=0,0xff=-1;
补码问题
tljjysj 2005-10-15
  • 打赏
  • 举报
回复
唉呀,真是不好意思,程序没说明白,让大家猜来猜去的.主要是因为最近太忙了,上网与大家沟通的机会也少.
以上程序中说到的iMemroy_AI是全局变量。类型是unsigned int。现在问题是,我一个ICPCON牌子的协议转换器(我这样称呼它),里面需要内置一个多任务的程序。这个程序通过RS232串口的方式与设备相联,也就是说对设备来讲,这个协议转换器是上位机。
假设:SendCmdToBroadCast(int iPort,unsigned char *cmdstr) //发送命令
ReceiveFromBroadCast(int iPort,unsigned char *receives) //接收
以上两个函数都没有问题。这样的话,从设备BroadCast收到的字符串都存入了receives中对吧?数据在receives中的状态都是0x00,0xFF,但考虑到有干扰的时候会有别的字符。这时问题出现了,无论你是使用unsigned char 还是char 类型来接收字符串,程序中总认为0x00与0xFF的值是相等的。这样一来。
if (sReceives[0]==0x00)
iMemory_AI[0]=0x00;
else
iMemory_AI[0]=0x01;

似乎毫无用处。假如sReceives中有48个字符,其中只有10个是0x00,其他的是:0xFF。无论我怎么判断,写入iMemory_AI中的值要么都是0x00,要么都是0x01。这就说明0x00与0xFF的值相等啊。

顺便说明一下:我使用的是BC3.0
agaric 2005-10-04
  • 打赏
  • 举报
回复
注意signed 和 unsigned
wuzhy000 2005-10-03
  • 打赏
  • 举报
回复
这个程序有可能是个多任务程序。
iMemory_AI[0]可能是个全局变量,提供给令外的任务使用。
  • 打赏
  • 举报
回复
程序可能是考虑到移植问题可功能扩展总量,所以加上了对0xff的判断,以待以后补上相应的语句;或者是从其他地方copy过来的,没删除;或者是与其他语句对应,如0xff在其他地方表示结束。诸如此类,不一而足,不能片面的看一小段程序。
province_ 2005-10-02
  • 打赏
  • 举报
回复
是啊ELSEIF这句多余!
jsjjms 2005-10-02
  • 打赏
  • 举报
回复
现在的问题是:0x00和0xFF的值会相等吗?这样的判断会有用吗?
----------------------
不相等,判断有用!
我啃 2005-10-02
  • 打赏
  • 举报
回复
不同的类型会有不同的表示,但是怎么也不会得到0x00==0xff就像判断true==false那样,永远不会是true
yuanxiaojin 2005-10-02
  • 打赏
  • 举报
回复
楼主,你的iMemory_AI是什么类型的啊?要不是 unsigned的话????????
ch_lol 2005-10-02
  • 打赏
  • 举报
回复
前一个全 0
后一个全 1
当然不等了
K 2005-10-02
  • 打赏
  • 举报
回复
绝对不相等
MA_XILAI 2005-10-02
  • 打赏
  • 举报
回复
楼主,好像跟贴的各位都不知道您要问个什么问题。呵呵。请再仔细描述一下。
  • 打赏
  • 举报
回复
iMemory_AI[0]=sReceives[0] ? 1 : 0;
herryhuang 2005-10-01
  • 打赏
  • 举报
回复
iMemory_AI[0]=sReceives[0] ? 1 : 0;

snowbirdfly 2005-10-01
  • 打赏
  • 举报
回复
0x00和0xFF的值会相等吗?
值当然是不同了~~
0x00相当于十进制的0,而0xFF相当于十进制的15*16+15=255啊~~~
但是我不明白为什么要
if (sReceives[0]==0x00)
iMemory_AI[0]=0x00;
elseif(sReceives[0]==0xFF)
iMemory_AI[0]=0x01;
else
iMemory_AI[0]=0x01;
那不如直接
if (sReceives[0]==0x00)
iMemory_AI[0]=0x00;
else
iMemory_AI[0]=0x01;
了,为什么还要判断(sReceives[0]==0xFF)而且使得iMemory_AI[0]=0x01;都成立~~~
加载更多回复(3)

70,020

社区成员

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

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