搜索
bottom↓
回复: 5

请教马老师:while(*p) 这条语句

[复制链接]

出0入0汤圆

发表于 2010-4-4 15:51:47 | 显示全部楼层 |阅读模式
马老师您好,迫不得已有得来请教了

//向Tx_Buffer写入字符串数据(变量)
void Put_Variable_string_Into_Tx_Buffer(unsigned char *p)
{
       while(*p)
             {
               Put_byte_Into_Tx_Buffer(*p++);
           }
}

这个函数中 while(*p) 我觉得有很大问题,当p数组中含有0x00(是数据,不是停止符)时,0x00后面的数据是不是就不会发送了?
我用一个测试数组测试得到了我预期的效果,遇到0x00 就会停止发送。
如果采用while(*p != '/0') 呢?
我用AVRStudio 观察了反汇编,如下

(原文件名:1.jpg)


(原文件名:2.jpg)

所以我就认为 '/0' 和 0x00 是一样的,不知马老师怎么解决?

出0入0汤圆

发表于 2010-4-4 19:49:23 | 显示全部楼层
'\0' 就是0x00 :)

出0入0汤圆

发表于 2010-4-4 20:35:06 | 显示全部楼层
'\0'在语法上等于(signed char)0
0x00在语法上一般等于(unsigned char)0

进行比较的时候,是相等的

出0入0汤圆

 楼主| 发表于 2010-4-5 10:31:33 | 显示全部楼层
昨天和同学讨论了,因为我要发送的数据是一(指令+参数)串,其中经常会有0x00 数据出现,用while(*p)判断就行不通了,最后只好改成如下:
void Put_Variable_string_Into_Tx_Buffer(unsigned char n,*P)
{
    unsigned char i;
    for(i=0;i<n;i++)
    Put_byte_Into_Tx_Buffer(*p++);
}
事先定义要发送的字节,即使里面含有0,也能正确发送

出0入0汤圆

发表于 2010-4-7 23:56:42 | 显示全部楼层
LZ的函数是“向Tx_Buffer写入字符串数据(变量)”

按标准的“字符串”定义,字符串中是没有0x00的,它应该是ASCII表中可显示字符以及个别控制字符(如0x0d,0x0a)构成。所以标准的“字符串”是以0x00作为结束符的。“字符串”中的空格是0x20。

LZ定义的数据包是一(指令+参数)串,其中经常会有0x00 数据出现,那就不是“字符串”了,应该叫做二进制数据串。

出0入0汤圆

 楼主| 发表于 2010-4-8 20:32:06 | 显示全部楼层
回复【4楼】machao
-----------------------------------------------------------------------
只是知道怎么做,不是很清楚为什么要这么做,经过马老师的详细解答,小菜知道了,谢谢马老师!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-2 08:39

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表