如何在ruby中转换为big endian

use*_*222 5 ruby endianness

我有一个小端序的字符串,作为十六进制编码的字符串

000000020597ba1f0cd423b2a3abb0259a54ee5f783077a4ad45fb6200000218
000000008348d1339e6797e2b15e9a3f2fb7da08768e99f02727e4227e02903e
43a42b31511553101a051f3c0000000000000080000000000000000000000000
0000000000000000000000000000000000000000000000000000000080020000
Run Code Online (Sandbox Code Playgroud)

我想将每个32位块从little-endian字节换到big-endian

020000001fba9705b223d40c25b0aba35fee549aa477307862fb45ad18020000
0000000033d14883e297679e3f9a5eb108dab72ff0998e7622e427273e90027e
312ba443105315513c1f051a0000000080000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000280
Run Code Online (Sandbox Code Playgroud)

我尝试了几种方法,但还没有开始工作.如果有人可以展示示例实现,那就太棒了.

干杯.

Mar*_*une 5

您还可以使用packunpack通过:

  • 首先去解码十六进制
  • 然后将其转换为小端字节序的32位整数
  • 用大端编码这些整数
  • 将结果编码为十六进制。

在代码中:

s = "000000020597ba1f0cd4..."
[s].pack('H*').unpack('N*').pack('V*').unpack('H*')
# => "020000001fba9705b223..."
Run Code Online (Sandbox Code Playgroud)