串口通信中 无法发送0x00的问题

touree 2015-05-28 03:43:27
我用 serister 1.2 调试的
发送出去一行数据 比如 byte[] data;
但是当数据中出现 0x00 或者0x0000等 serister就不接收了 从0x00(包含)开始全部不显示
这个问题该怎么撸?
串口大神快来
...全文
1731 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
mjp1234airen4385 2015-05-29
  • 打赏
  • 举报
回复
没一点经验,就弄这个东西是麻烦一点了。
cai2h 2015-05-29
  • 打赏
  • 举报
回复
既然你旁边有个老头指点你,你平时跟他关系搞好点呗,在论坛上求方法效率是最低了
touree 2015-05-28
  • 打赏
  • 举报
回复
引用 7 楼 Z65443344 的回复:
既然有跟你一起上班的老头指点你,遇到问题继续问他啊 他让你++你就++呗 反正逻辑上其实没啥大区别 关键是循环里肯定每次都应该是不一样的值吧,都给一样的值是要干啥
他也不好好教,哎 一言难尽。 就这点东西我搞了一个月了, 说白了就是有一个dataset 帮定了一些数据,把这些数据按不同的发送方式或截取不同的值写入串口,再读取一个返回值,没了。 我编程一点不会,硬是在网上找或者看书搞,这最后了一天了明天就,实在有几个问题撸不出来。
於黾 2015-05-28
  • 打赏
  • 举报
回复
既然有跟你一起上班的老头指点你,遇到问题继续问他啊 他让你++你就++呗 反正逻辑上其实没啥大区别 关键是循环里肯定每次都应该是不一样的值吧,都给一样的值是要干啥
touree 2015-05-28
  • 打赏
  • 举报
回复
引用 5 楼 Z65443344 的回复:
for (int s = 7; s < rows+7; s+=2) 从这里开始就不能显示了 也可能是我的循环问题 ????? { data[s] = (byte)(koki.ID << 8); data[s+1] = (byte)koki.ID; } 我猜你其实是想这样?? 问题是你循环里一直都用koki.ID,这里不需要传入索引吗,你确定都用同一个值?
我也是写的 s加1,跟我一起上班的老头让我写s加加,,,,,,,, 新人啊 不懂。你都说写s加1了,我决定不听那老头的。 rows,koki.ID都是从别的类中拿来的 循环这块我还不太会写,
於黾 2015-05-28
  • 打赏
  • 举报
回复
for (int s = 7; s < rows+7; s+=2) 从这里开始就不能显示了 也可能是我的循环问题 ????? { data[s] = (byte)(koki.ID << 8); data[s+1] = (byte)koki.ID; } 我猜你其实是想这样?? 问题是你循环里一直都用koki.ID,这里不需要传入索引吗,你确定都用同一个值?
於黾 2015-05-28
  • 打赏
  • 举报
回复
for (int s = 7; s < rows+7; s++) 从这里开始就不能显示了 也可能是我的循环问题 ????? { data[s] = (byte)(koki.ID << 8); s++; data[s] = (byte)koki.ID; } for里不是已经s++了吗,循环里又++是要闹哪样
於黾 2015-05-28
  • 打赏
  • 举报
回复
data[205]=0x00; data[206]=0x00; 一个byte只有2个16进制位,也就是只有0x00,没有什么0x0000这种玩意. 你想写0x0000,那么要把yyk定义成ushort
touree 2015-05-28
  • 打赏
  • 举报
回复
引用 楼主 touree 的回复:
我用 serister 1.2 调试的 发送出去一行数据 比如 byte[] data; 但是当数据中出现 0x00 或者0x0000等 serister就不接收了 从0x00(包含)开始全部不显示 这个问题该怎么撸? 串口大神快来
你讲的我懂了
引用 1 楼 Z65443344 的回复:
你是给转字符串了吧? 字符串里0x00代表字符串结尾,后面的当然不显示了 你要循环byte数组,每个元素转字符串,不要整个字节数组转字符串 或者你这样转: string strRes = BitConverter.ToString(bytes); 不要用System.Text.Encoding.Default.GetString转
你讲的我懂了一半 后面的转换不太懂 我给你看看我写的方法吧 public static void analog() { // list.Add(koki); // foreach (Koki koki_id in list) // { LEN = 208; data[0] = STX; data[1] = CMD[0]; data[2] = (byte)((LEN / 1000)<<4 | (LEN/100)); data[3] = (byte)(((LEN % 100) / 10)<<4 |(LEN % 100) % 10); data[4] = (byte)pattern.Id; data[5] = (byte)((hour / 10) << 4 | hour % 10);//高8位 data[6] = (byte)((min / 10) << 4 | min % 10);//低8位 for (int s = 7; s < rows+7; s++) 从这里开始就不能显示了 也可能是我的循环问题 ????? { data[s] = (byte)(koki.ID << 8); s++; data[s] = (byte)koki.ID; } data[204] = (byte)pattern.Light; byte yyk = 0x0000; 那比如说我有这个byte yyk等于0x0000该怎么写入data[205/206]????? data[205] = (byte)(yyk << 8); data[206] = (byte)yyk; Serial.serialport.Parity = Parity.Odd; data[207] = (byte)Serial.serialport.Parity; data[208] = ETX; Serial.serialport.Write(data, 0, 208);
於黾 2015-05-28
  • 打赏
  • 举报
回复 1
你是给转字符串了吧? 字符串里0x00代表字符串结尾,后面的当然不显示了 你要循环byte数组,每个元素转字符串,不要整个字节数组转字符串 或者你这样转: string strRes = BitConverter.ToString(bytes); 不要用System.Text.Encoding.Default.GetString转

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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