如何在Ruby中构建一个长尾词数据包?

2026-04-11 18:131阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计435个文字,预计阅读时间需要2分钟。

如何在Ruby中构建一个长尾词数据包?

我正在尝试使用ruby-serialport库创建一个通过串行行发送的数据包。看起来操作很简单,当我写入一个字符串时,它会触发硬件执行预期功能:`packet=\xFF\x03\x10\x01\x01\xFE sp.write(packet)`

我正在尝试使用 ruby-serialport创建一个通过串行发送的数据包.这看起来应该很简单,当我写一个字符串时它会起作用:

如何在Ruby中构建一个长尾词数据包?

packet = "\xFF\x03\x10\x01\x01\xFE" sp.write(packet) =>hardware does what it's supposed to, opens the door represented by the 4th hex value

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

door = 1 packet = "\xFF\x03\x10" + door.to_s(16) + "\x01\xFE" sp.write(packet) => can't convert fixnum into string

door = 1 packet = "\xFF\x03\x10" + door.to_a.pack('H*') + "\x01\xFE" sp.write(packet) => to_a will be obsolete can't convert fixnum into string

door = 1 sp.write("\xFF\x03\x10") sp.write(door) sp.write("\x01\xFE") =>no response from hardware

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

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

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

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

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

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

本文共计435个文字,预计阅读时间需要2分钟。

如何在Ruby中构建一个长尾词数据包?

我正在尝试使用ruby-serialport库创建一个通过串行行发送的数据包。看起来操作很简单,当我写入一个字符串时,它会触发硬件执行预期功能:`packet=\xFF\x03\x10\x01\x01\xFE sp.write(packet)`

我正在尝试使用 ruby-serialport创建一个通过串行发送的数据包.这看起来应该很简单,当我写一个字符串时它会起作用:

如何在Ruby中构建一个长尾词数据包?

packet = "\xFF\x03\x10\x01\x01\xFE" sp.write(packet) =>hardware does what it's supposed to, opens the door represented by the 4th hex value

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

door = 1 packet = "\xFF\x03\x10" + door.to_s(16) + "\x01\xFE" sp.write(packet) => can't convert fixnum into string

door = 1 packet = "\xFF\x03\x10" + door.to_a.pack('H*') + "\x01\xFE" sp.write(packet) => to_a will be obsolete can't convert fixnum into string

door = 1 sp.write("\xFF\x03\x10") sp.write(door) sp.write("\x01\xFE") =>no response from hardware

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

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

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

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

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

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