
テキストファイルに以下のデータがあるとします。
テキストデータの中身、
「
000E6D4181AA,1234567890ABCDEF
0123456789AB,0100000000000000
050505AAAAAA,0200000000000000
070707BBBBBB,0300000000000000
012345CCCCCC,0400000000000000
cdef01DDDDDD,0500000000000000
・
・
・
」
12桁の数値(16進数)と16桁の数値(16進数)を「,」で区切ります。1行の終端は改行しています。
このテキストファイルにあるデータを以下のバイナリ形式に変換させたいのです。バイナリ形式の各行の16バイト目は、テキストデータにはデータがないので、「00」とします。「,」で区切ったバイナリ形式は「2C」になると思います。
テキストデータの左上から順に「00」は以下の、左上から順の「00」に対応します。
バイナリデータの中身、
「
00 0E 6D 41 81 AA 2C 12 34 56 78 90 AB CD EF 00
01 23 45 67 89 AB 2C 01 00 00 00 00 00 00 00 00
05 05 05 AA AA AA 2C 02 00 00 00 00 00 00 00 00
07 07 07 BB BB BB 2C 03 00 00 00 00 00 00 00 00
01 23 45 CC CC CC 2C 04 00 00 00 00 00 00 00 00
CD EF 01 DD DD DD 2C 05 00 00 00 00 00 00 00 00
・
・
・
」
ソースコードでの例、
テキストデータ1行目の1つ目の「,」までのデータ「000E6D4181AA」を、メモリ領域に読み込む。2桁の数値を1バイトで格納する。
つまり、
char buf[6]とすると、
buf[0]=0xAA
buf[1]=0x81
buf[2]=0x41
buf[3]=0x6D
buf[4]=0x0E
buf[5]=0x00
とこのようにメモリに格納したいのです。
格納するバイトオーダーはリトルエンディアン方式とします。
以上で、質問を終わりますが、質問が上手くできていないと思いますので、説明に不備があるかもしれません。その時はお手数ですが、連絡下さい。
No.1ベストアンサー
- 回答日時:
/* とりあえず、こんな感じで */
#include <stdio.h>
#include <string.h>
#include <ctype.h>
void main(void){
int c,x;
FILE *fi,*fo;
char table[]="0123456789ABCDEF";
fi=fopen("HexData.txt","r");
fo=fopen("binData.dat","wb");
while(EOF!=(c=fgetc(fi))){
switch(c){
case ',':
fputc(',',fo);
break;
case '\n':
fputc(0,fo);
break;
default:
x=strchr(table,toupper(c))-table;
c=fgetc(fi);
x=x*16+(strchr(table,toupper(c))-table);
fputc(x,fo);
break;
}
}
fcloseall();
}
No.2
- 回答日時:
こんなんはどうですか。
void main(void){
FILE *fi,*fo;
char buf[256];
fi=fopen("HexData.txt","r");
fo=fopen("binData.dat","wb");
while (fgets(buf, sizeof(buf)-1, fi)) {
unsigned char c1[12/2];
unsigned char c2[16/2];
sscanf(buf, "%12I64x,%16I64x", (long*)c1, (long*)c2);
fprintf(fo, "%02x %02x %02x %02x %02x %02x 2c "
"%02x %02x %02x %02x %02x %02x %02x %02x 00\n",
c1[5], c1[4], c1[3], c1[2], c1[1], c1[0],
c2[7], c2[6], c2[5], c2[4], c2[3], c2[2], c2[1], c2[0]);
}
fcloseall();
}
※"I64"がどのコンパイラでもサポートされているかは知りませんが
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) マクロを教えてください。 7 2023/06/01 19:47
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
- C言語・C++・C# C言語のバイナリファイルに関する質問 8 2022/06/24 07:20
- Ruby pandasでsqlite3にテーブル作成・追加・読み出しでindexの取り扱い方教えてください 5 2023/03/08 09:57
- Ruby 初心者プログラミング 3 2022/10/12 11:31
- システム CSVファイルのマッピング処理の省力化 1 2022/11/24 00:01
- HTML・CSS GETをPOSTに変更したところ 送信 不能です。 1 2022/04/10 17:31
- 格安スマホ・SIMフリースマホ SIMフリースマホ(Android限定)米国で通話ができる実売3万円台の電池が持つ端末はないですか? 6 2022/11/12 11:42
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) vbaについて 主に以下のような設定をしたいです。 Aブックの表の行数が20未満だったら Bブックの 1 2023/06/08 23:40
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
バッファとは何ですか
-
エクセルVBA 2千万行のCSVファ...
-
EXCEL VBAでテキストファイルの...
-
ページ読み込み時に自動的にsub...
-
エラー:ストリームの終わりを...
-
Microsoft VBAで2GBを超えるフ...
-
ビットマップファイル生成(C言...
-
FTPでエクセルをPUTするとファ...
-
画像の保存方法。
-
VBA バイナリ―から文字列にす...
-
テキストデータをバイナリデー...
-
ファイルをダウンロードして展...
-
【Teraterm】filewritelnについて
-
入力ファイルをバイナリにする利点
-
リストビュー ⇔ 別ファイル構...
-
クリップボードからファイル名...
-
bitmap画像の保存がうまくいき...
-
.NETのアップロードのサイズ制...
-
VBAを使って、一部バイナリデー...
-
FMFファイルの構造を知りたいの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バッファとは何ですか
-
Microsoft VBAで2GBを超えるフ...
-
エラー:ストリームの終わりを...
-
EXCEL VBAでテキストファイルの...
-
エクセルVBA 2千万行のCSVファ...
-
EXCEL VBAで、バイナリデータの...
-
VBA バイナリ―から文字列にす...
-
ページ読み込み時に自動的にsub...
-
【python】Excelファイルを読み...
-
EOF
-
テキストデータをSQLServerに取...
-
PHPのfgetcsvの処理容量について
-
なぜデータの整合性を確認する...
-
【MFC】CFileでSeekした位置か...
-
C++ Builderにおける画像データ...
-
入力ファイルをバイナリにする利点
-
バイナリファイルの検索について
-
バイナリーデータの一部データ...
-
htmlのデータをwebページみたい...
-
Javaでのエンディアン変換
おすすめ情報