- ベストアンサー
perlで16進のデータをたくさんセットするには?
- perlでテストデータを作成する方法について教えてください。
- データとしては16進でx'97A0'からx'9EDF'までの2バイト文字コードのデータをひたすら打ち込んだ、テキストデータを作成したいです。
- 単純にHEXのデータx'97a1'をunpackで10進化したデータに対して、1を足しこみ、それをPACKし直す方法を試しましたがうまくいきません。
- みんなの回答 (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; として下さい。
その他の回答 (2)
- zxcv0000
- ベストアンサー率56% (111/196)
"97a1" や "0d" では無く、 0x97a1 や 0x0d と書きましょう。 セミコロン漏れも直しましょう。 $data2++ と書くのはまずいでしょう。 他にも問題が出そうですが、とりあえずそこだけ。
お礼
コーディング不備のご指摘ありがとうございます。 ++は駄目なのですね。 +1にすると足しこみしてくれました。 どういう違いがあるか、また調べてみたいと思います。
- sakusaker7
- ベストアンサー率62% (800/1280)
"97a1"から"97a2"にしたいという話なら、 pack/unpackじゃなくて、hexで整数化したのに加算して、 それをprintfを使って十六進表記で出力すればいいんじゃないでしょうか
お礼
最初思いついたのがこの方法だったのですが、HEXコードがそのまま文字列として張り付いてしまいうまくいきませんでした。が、教えていただいたprintfでHEX出力をpackしたものを出力したらできました。 ありがとうございました。
お礼
どうもpack自体を理解できていないのが正直なところです。 サンプルコードも付けていただき感謝感謝です。 理解できないところもあるので、調べつつこれで試してみたいと思います。 ありがとうございました。