![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
テキストファイルに以下のデータがあるとします。
テキストデータの中身、
「
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ランキング
-
バッファとは何ですか
-
ページ読み込み時に自動的にsub...
-
【python】Excelファイルを読み...
-
バイナリファイルの比較につい...
-
バイナリエディタのつかいかた
-
Javaでのエンディアン変換
-
Microsoft VBAで2GBを超えるフ...
-
テキストデータをSQLServerに取...
-
テキストデータをバイナリデー...
-
EXCEL VBAでテキストファイルの...
-
リストビュー ⇔ 別ファイル構...
-
Excelファイルの軽量化の方法を...
-
削除したファイルの復旧、およ...
-
バイナリーデータの一部データ...
-
PHPのfgetcsvの処理容量について
-
C言語初心者の質問失礼します。
-
フルパスから最後のディレクト...
-
C言語関数違いについて。
-
Acccess レポートをグループ別...
-
グローバル変数のよくない使い...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バッファとは何ですか
-
EXCEL VBAでテキストファイルの...
-
Microsoft VBAで2GBを超えるフ...
-
入力ファイルをバイナリにする利点
-
ページ読み込み時に自動的にsub...
-
エクセルVBA 2千万行のCSVファ...
-
エラー:ストリームの終わりを...
-
EOF
-
VBA バイナリ―から文字列にす...
-
バイナリエディタのつかいかた
-
テキストデータをSQLServerに取...
-
バイナリファイルの検索について
-
バイナリ形式のXMLファイルを読...
-
画像の保存方法。
-
FTPでエクセルをPUTするとファ...
-
バイナリファイルの比較につい...
-
バイナリーデータの一部データ...
-
MacからWinにファイルを添付す...
-
C言語とシリアル通信の送受信...
-
ROM書き込みデータのファイル形...
おすすめ情報