プロが教える店舗&オフィスのセキュリティ対策術

テキストファイルに以下のデータがあるとします。
テキストデータの中身、

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
とこのようにメモリに格納したいのです。
格納するバイトオーダーはリトルエンディアン方式とします。


以上で、質問を終わりますが、質問が上手くできていないと思いますので、説明に不備があるかもしれません。その時はお手数ですが、連絡下さい。

A 回答 (2件)

/* とりあえず、こんな感じで */


#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();
}
    • good
    • 0

こんなんはどうですか。



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"がどのコンパイラでもサポートされているかは知りませんが
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています