5

16 進数でエンコードされた文字列として、リトルエンディアン順の文字列があります

000000020597ba1f0cd423b2a3abb0259a54ee5f783077a4ad45fb6200000218
000000008348d1339e6797e2b15e9a3f2fb7da08768e99f02727e4227e02903e
43a42b31511553101a051f3c0000000000000080000000000000000000000000
0000000000000000000000000000000000000000000000000000000080020000

各 32 ビット チャンクをリトルエンディアンからビッグ エンディアンにバイトスワップして、

020000001fba9705b223d40c25b0aba35fee549aa477307862fb45ad18020000
0000000033d14883e297679e3f9a5eb108dab72ff0998e7622e427273e90027e
312ba443105315513c1f051a0000000080000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000280

私はいくつかのアプローチを試みましたが、うまくいきませんでした。誰かがサンプル実装を示すことができれば素晴らしいことです。

乾杯。

4

3 に答える 3

3

scanŁukasz Niemier の回答に加えて、グループ化を 1 ステップで処理できます。

hex_string = "000000020597ba1f..."
hex_string.scan(/(..)(..)(..)(..)/).map(&:reverse).join
# => "020000001fba9705..."
  • scan(/(..)(..)(..)(..)/)文字列を 4 x 2 バイトのグループに分割します。

    [["00", "00", "00", "02"], ["05", "97", "ba", "1f"], ... ]
    
  • map(&:reverse)内側の 2 バイト配列を逆にします。

    [["02", "00", "00", "00"], ["1f", "ba", "97", "05"], ... ]
    
  • joinすべての配列要素を結合します

    "020000001fba9705..."
    
于 2013-04-18T10:11:47.663 に答える