• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:perlで16進のデータをたくさんセットするには?)

perlで16進のデータをたくさんセットするには?

このQ&Aのポイント
  • perlでテストデータを作成する方法について教えてください。
  • データとしては16進でx'97A0'からx'9EDF'までの2バイト文字コードのデータをひたすら打ち込んだ、テキストデータを作成したいです。
  • 単純にHEXのデータx'97a1'をunpackで10進化したデータに対して、1を足しこみ、それをPACKし直す方法を試しましたがうまくいきません。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

たぶん、質問者さんは pack の意味を取り違えているようです。 あっているかわかんないけど、 my $start = 0x97a1; my $end = 0x9edf; my $file = shift || 'tmp.txt'; open my $fh, '>', $file or die "$!:$file"; binmode $fh; for my $num ( $start .. $end ) { my $bin = pack 'n', $num + 1; print $fh $bin; } close $fh or die "$!:$file"; エンディアンが逆なら、 my $bin = pack 'v', $num + 1; として下さい。

monorilis
質問者

お礼

どうもpack自体を理解できていないのが正直なところです。 サンプルコードも付けていただき感謝感謝です。 理解できないところもあるので、調べつつこれで試してみたいと思います。 ありがとうございました。

その他の回答 (2)

  • zxcv0000
  • ベストアンサー率56% (111/196)
回答No.2

"97a1" や "0d" では無く、 0x97a1 や 0x0d と書きましょう。 セミコロン漏れも直しましょう。 $data2++ と書くのはまずいでしょう。 他にも問題が出そうですが、とりあえずそこだけ。

monorilis
質問者

お礼

コーディング不備のご指摘ありがとうございます。 ++は駄目なのですね。 +1にすると足しこみしてくれました。 どういう違いがあるか、また調べてみたいと思います。

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

"97a1"から"97a2"にしたいという話なら、 pack/unpackじゃなくて、hexで整数化したのに加算して、 それをprintfを使って十六進表記で出力すればいいんじゃないでしょうか

monorilis
質問者

お礼

最初思いついたのがこの方法だったのですが、HEXコードがそのまま文字列として張り付いてしまいうまくいきませんでした。が、教えていただいたprintfでHEX出力をpackしたものを出力したらできました。 ありがとうございました。

関連するQ&A