加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

在ruby中创建数据包

发布时间:2020-12-17 01:28:33 所属栏目:百科 来源:网络整理
导读:我正在尝试使用 ruby-serialport创建一个通过串行发送的数据包.这看起来应该很简单,当我写一个字符串时它会起作用: packet = "xFFx03x10x01x01xFE"sp.write(packet)=hardware does what it's supposed to,opens the door represented by the 4th hex
我正在尝试使用 ruby-serialport创建一个通过串行发送的数据包.这看起来应该很简单,当我写一个字符串时它会起作用:

packet = "xFFx03x10x01x01xFE"
sp.write(packet)
=>hardware does what it's supposed to,opens the door represented by the 4th hex value

但我显然需要以编程方式进行,我无法找到正确的方法.以下是我尝试过的一些事情:

door = 1    
packet = "xFFx03x10" + door.to_s(16) + "x01xFE"
sp.write(packet)
=> can't convert fixnum into string

door = 1
packet = "xFFx03x10" + door.to_a.pack('H*') + "x01xFE"
sp.write(packet)
=> to_a will be obsolete
can't convert fixnum into string

door = 1
sp.write("xFFx03x10")
sp.write(door)
sp.write("x01xFE")
=>no response from hardware

任何人都可以帮我解决如何正确地将数字转换为串行端口的正确十六进制表示法并加入其他十六进制字符串?提前致谢!

解决方法

如果您坚持使用字符串来表示其他二进制数据,那么您真的会遇到麻烦.你真正需要的是包装:

packet = [ 0xFF,0x30,0x10,door,0x01,0xFE ].pack('C*')

这使得构造和解构任意二进制数据变得非常容易.该方法不仅支持无符号字符,还支持常用的各种其他类型.

您甚至可能想构建自己的方法来读写这个:

def write_packet(*bytes)
  sp.write(bytes.flatten.pack('C*'))
end

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读