一个很诡异的代码

dejigiekjief 2010-11-09 06:21:50
给串口通信的一个程序里的
有这么一个代码:s1 = s1 & Right("00" & Hex(buf1(i)), 2)
我想知道 我直接就HEX(buf1(i))不行吗
为什么还要多此一举的先连接 然后 再选取出右端的两个字符呢
岂有此理
求高手解答
...全文
187 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
dejigiekjief 2010-11-10
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 veron_04 的回复:]
首先你要理解Right函数的意思,他的意思是从右边开始取字符串指定长度内容。就你这个例子而言,就是保证每一个字节都是两位数字,不足的左边用0补齐,其实还可以使用:Format(Hex(buf1(i)),"00")来得到。
[/Quote]

对对对 呵呵 我顶
dejigiekjief 2010-11-10
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 veron_04 的回复:]
这个完全是根据协议的,很有可能是你的InputMode属性设置的是文本方式,而通信协议却规定的是二进制方式表示数据,所以就需要如此处理,楼主,可否提供通信协议?这样大家也好更多的讨论讨论
[/Quote]

每次提问巫师都会热情的解答 非常感谢
协议都被你猜到了 真有你的
本来想把协议的有关部分给传上来呢 但是折腾了半天也不知道那个小框框怎么添加的 只好罢手了 呵呵 但是协议上确实是让输入的二进制的数字

还有 巫师,你说的INPUTMODE在什么地方呢 是TEXTBOX的属性吗 怎么我没有找到呢
只有一个相似的 是IMEMODE
求解答
贝隆 2010-11-10
  • 打赏
  • 举报
回复
首先你要理解Right函数的意思,他的意思是从右边开始取字符串指定长度内容。就你这个例子而言,就是保证每一个字节都是两位数字,不足的左边用0补齐,其实还可以使用:Format(Hex(buf1(i)),"00")来得到。
dejigiekjief 2010-11-10
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 dianyancao 的回复:]
不知道是不是这样,
Hex(buf1(i))的长度不够两个字符时,会补零到前面
凑成Len为2,前面带零的字符串
[/Quote]

UP 果然是正解
数据协议里面需要是两位的 这样就凑成了两位
真的非常感谢
但是 为什么他不用s1 = s1 & Right("0" & Hex(buf1(i)), 2)这样呢
呵呵
达人知道吗
dejigiekjief 2010-11-10
  • 打赏
  • 举报
回复
有协议有真相 一会给大家看看协议
dejigiekjief 2010-11-10
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 bcrun 的回复:]
按规矩补0吧.底层通信这种东西,即使只是传输的数据,也常常需要精确到一位都不差的,格式也要符合标准.这和写HTML网页时,浏览器经常能容错不能相比的.
[/Quote]

是的
dejigiekjief 2010-11-10
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 dianyancao 的回复:]
引用 9 楼 dejigiekjief 的回复:
...s1 = s1 & Right("0" & Hex(buf1(i)), 2)这样呢...

这个只补一个零,

楼主前面的会在Hex(buf1(i))的长度为0时,返回"00"
Format(Hex(buf1(i)),"00")的长度不一定为2,也不是提取 十六进制的buf1(i) 后两位字符
[/Quote]

恩 呵呵
bcrun 2010-11-10
  • 打赏
  • 举报
回复
按规矩补0吧.底层通信这种东西,即使只是传输的数据,也常常需要精确到一位都不差的,格式也要符合标准.这和写HTML网页时,浏览器经常能容错不能相比的.
dianyancao 2010-11-10
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 dejigiekjief 的回复:]
...s1 = s1 & Right("0" & Hex(buf1(i)), 2)这样呢...
[/Quote]
这个只补一个零,

楼主前面的会在Hex(buf1(i))的长度为0时,返回"00"
Format(Hex(buf1(i)),"00")的长度不一定为2,也不是提取 十六进制的buf1(i) 后两位字符
yachong 2010-11-09
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 dianyancao 的回复:]
不知道是不是这样,
Hex(buf1(i))的长度不够两个字符时,会补零到前面
凑成Len为2,前面带零的字符串
[/Quote]
正解!
dbcontrols 2010-11-09
  • 打赏
  • 举报
回复
是通信协议规定的,哪位是什么格式、什么内容都是死的。

[Quote=引用 4 楼 dianyancao 的回复:]
不知道是不是这样,
Hex(buf1(i))的长度不够两个字符时,会补零到前面
凑成Len为2,前面带零的字符串
[/Quote]
贝隆 2010-11-09
  • 打赏
  • 举报
回复
这个完全是根据协议的,很有可能是你的InputMode属性设置的是文本方式,而通信协议却规定的是二进制方式表示数据,所以就需要如此处理,楼主,可否提供通信协议?这样大家也好更多的讨论讨论
dianyancao 2010-11-09
  • 打赏
  • 举报
回复
不知道是不是这样,
Hex(buf1(i))的长度不够两个字符时,会补零到前面
凑成Len为2,前面带零的字符串
lliai 2010-11-09
  • 打赏
  • 举报
回复
不理解。就是,我直接就HEX(buf1(i))不行吗,期待达人的回答。
clear_zero 2010-11-09
  • 打赏
  • 举报
回复
你debug一下就看到了
dbcontrols 2010-11-09
  • 打赏
  • 举报
回复
协议规定的吧

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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