【问题标题】:Pack and unpack a pair of integers to hex将一对整数打包和解包为十六进制
【发布时间】:2016-02-25 17:50:36
【问题描述】:

我有一对 Little-Endian 格式的 32 位整数,我必须转换为十六进制值并反转该过程。 我知道如何转换为十六进制,但我无法转回整数。

h = [15325,24748]

i = h.pack("S*").unpack('N*').first
 => 3711675488 

hex-value = i.to_s(16)
 => "dd3bac60" 

现在,如何将“dd3bac60”转换回 [15325,24748]?

谢谢

【问题讨论】:

  • 请注意,这些看起来像是被视为 16 位整数,而不是 32 位。最终结果是用十六进制表示的 32 位数字。

标签: ruby pack unpack


【解决方案1】:

只需以相反的顺序执行所有操作,并反转您的打包/解包逻辑:

hex_string = "dd3bac60"
[hex_string.to_i(16)].pack('N*').unpack('S*')
  => [15325, 24748]

说明:您在正向变换中应用的每个函数都有一个逆函数,因此只需以相反的顺序应用它们:

  • String#to_i( base )Integer.to_s( base ) 的倒数
  • Array#pack('N*')String#unpack('N*') 的倒数
  • String#unpack('S*')Array#pack('S*') 的倒数

【讨论】:

    猜你喜欢
    • 2010-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多