【问题标题】:Equivelant way of performing Ruby's array.pack in Python在 Python 中执行 Ruby array.pack 的等效方法
【发布时间】:2019-05-24 13:52:43
【问题描述】:

我有一个如下所示的 Ruby 函数:

def domain_request
  pkt = "0300000c02f0800400010001"
  return [pkt].pack("H*")
end

基本上,我想做的是在 Python 中执行相同的操作(如果您还可以提供对包格式的参考,将不胜感激)我已经尝试从 bytearray 这样做,但是,我'米此时不知所措。任何帮助将不胜感激,谢谢。

【问题讨论】:

  • 我不知道ruby的包是做什么的,但我想知道它是否类似于Python的struct.pack
  • @Kevin 这就是我最初的想法!但问题在于 ruby​​ 的包可以接受多个参数(在一个数组中)并同时打包它们,而 python 的结构则没有。我想我可以在它上面使用一个 for 循环来看看它是否会做任何事情,但到目前为止我一直没有成功
  • 有时我觉得我正在编写代码 - 然后我查看了 ruby​​ 的 pack 方法的源文档并蜷缩成一团。
  • @Mark 99.99% 的时间我都不知道自己在做什么,所以不要难过。就在昨天,我蓝屏了我的虚拟机,试图通过套接字请求连接到它

标签: python ruby equivalent


【解决方案1】:

这看起来像你想要的

from binascii import unhexlify

str = "0300000c02f0800400010001"
unhexlify(str)

虽然 ruby​​ 的输出看起来略有不同,但在 ruby​​ 和 python 中比较这些都是正确的,这段代码在 python 和 ruby​​ 中都有效:

s1 = "\x03\x00\x00\x0c\x02\xf0\x80\x04\x00\x01\x00\x01"
s2 = "\x03\x00\x00\f\x02\xF0\x80\x04\x00\x01\x00\x01"

s1 == s2 #=> true or True in python

【讨论】:

  • 我不想解码,我想把它打包成相同格式的字节。但是鉴于我刚刚收到的评论,似乎 Python 没有什么,所以 binascii 可能是我最好的选择,或者我可以使用我猜的系统命令
  • 测试结果。它返回与您的 ruby​​ 方法相同的值
  • 回溯(最近一次调用最后):文件“”,第 1 行,在 UnicodeDecodeError:'ascii' 编解码器无法解码位置 5 中的字节 0xf0:序数不在范围内(128)
  • 你是个天才
  • 通过wireshark查看它们看起来非常相似,所以它可能会成功
猜你喜欢
  • 1970-01-01
  • 2017-11-11
  • 1970-01-01
  • 1970-01-01
  • 2020-06-16
  • 2016-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多