
テキストファイルに以下のデータがあるとします。
テキストデータの中身、
「
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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
バッファとは何ですか
-
バイナリーデータの一部データ...
-
FMFファイルの構造を知りたいの...
-
ページ読み込み時に自動的にsub...
-
Microsoft VBAで2GBを超えるフ...
-
テキストデータをバイナリデー...
-
バイナリファイルの検索について
-
ビットマップファイル生成(C言...
-
【MFC】CFileでSeekした位置か...
-
入力ファイルをバイナリにする利点
-
VC++2010でmecabを使いたい
-
プログラミング初心者です。プ...
-
画素値取得について
-
C言語の質問です。バイナリ形...
-
MacからWinにファイルを添付す...
-
C言語初心者の質問失礼します。
-
どんなプログラムを書いても指...
-
windows.hがincludeされない
-
教えてください!vectorworksに...
-
パラメータが正しくありません...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バッファとは何ですか
-
Microsoft VBAで2GBを超えるフ...
-
エラー:ストリームの終わりを...
-
ページ読み込み時に自動的にsub...
-
VBA バイナリ―から文字列にす...
-
EOF
-
入力ファイルをバイナリにする利点
-
EXCEL VBAでテキストファイルの...
-
【python】Excelファイルを読み...
-
MacからWinにファイルを添付す...
-
関数の容量を知るには?
-
= (イコール)で始まるセルの値...
-
EXCEL VBAで、バイナリデータの...
-
BMP画像の画像データ本体をテキ...
-
VC++2010でmecabを使いたい
-
C言語とシリアル通信の送受信...
-
ファイルをダウンロードして展...
-
バイナリーデータの一部データ...
-
wave形式(*.wav)のフォーマット...
-
デバイスファイルに書き込むこと
おすすめ情報