前提・実現したいこと
Cで16進ダンプ、および復元するツールを作っています。
- ツールの概要
機能1:入力ファイル(input.bin)を16進ダンプして、出力ファイル(output.txt)に出力する。
機能2:入力ファイル(input.txt)を復元して、出力ファイル(output.bin)に出力する。
※output.txtとintput.txtの内容が同じ場合、output.binはinput.binと同じ内容になる。
- input.bin
バイナリデータ(テキストデータ含む)で構成される。
- output.txt
ダンプ結果がテキスト形式で書かれている。
ここではアドレスとかスペース区切りは無く、データ(0~9, A~F,a~fの文字)のみのファイルとします。
- input.txt
output.txtと全く同じ内容とします。
- output.bin
バイナリデータ(テキストデータ含む)で構成される。
発生している問題・エラーメッセージ
機能1はほぼ完成しています。
機能2は、ASCIIの1バイト文字の復元はできましたが、Shift-JISの2バイト文字が復元できません。
下のコードは、2バイト分の16進文字から2バイト文字に復元するものですが、結果は
となってしまいました。
該当のソースコード
C
1int main(void){ 2 FILE *fo; 3 4 char output[] = "output.bin"; 5 6 //ファイルオープン 7 if (fopen_s(&fo, output, "wb") != 0){ //出力ファイルオープン 8 //失敗ならエラー 9 } 10 11 char c[5]= "82A0"; //0x82A0 => 'あ' 12 long v = strtol(c, NULL, 16); 13 fwrite(&v, 2, 1, fo); //ここが悪い? 14 15 //ファイルクローズ 16 if (fclose(fo) != 0){ //出力ファイルクローズ 17 //失敗ならエラー 18 } 19}
試したこと
long v の値が33,440(0x82A0)になっていることはデバッガで確認できました。
次の行のfwriteがうまくできてないのだと思ってます。
補足情報(FW/ツールのバージョンなど)
なし
回答2件
あなたの回答
tips
プレビュー