1

dmg ファイルのヘッダーを取得しようとしています。 私はこれが私を大いに助けるリンクを見ました。だから私は、このすべてを取得するための C++ プログラムを作成します。

ここにあります :

struct Header
{
int img;
char tag[4];
short size;
short   version;
int format;
int flag;
int num_block;
int offset;
int length;
int offset_comment;
int length_comment;
int offset_creator;
int length_creator;
char space[16];
};

void read_header(const char *path)
{
 Header head;

 FILE *file =  fopen(path, "rb");


 fread(&head, 1, sizeof(Header), file);

 printf(" size short = %d\n", sizeof( short ));
 printf(" size int = %d\n", sizeof( int ));
 printf(" size struct = %d\n", sizeof( Header ));

 printf("img %d\n", head.img);
 printf("tag %s\n", head.tag);  
 printf("size %d\n", head.size);
 printf("version %d\n", head.version);
 printf("format %d\n", head.format);
 printf("flag %d\n", head.flag);
 printf("num_block %d\n", head.num_block);
 printf("offset %d\n", head.offset);
 printf("length %d\n", head.length);
 printf("offset_comment %d\n", head.offset_comment);
 printf("length_comment %d\n", head.length_comment);
 printf("offset_creator %d\n", head.offset_creator);
 printf("length_creator %d\n", head.length_creator);

 }

そして、私はこれを取得します:

size short = 2
size int = 4
size struct = 64
img 152133
tag 
size 0
version 0
format 0
flag 0
num_block 0
offset 0
length 0
offset_comment 0
length_comment 0
offset_creator 0
length_creator 0

最初の値を除いて、すべての値が null である理由がわかりません。私のdmgファイルは良好で、開くことができます。null値を取得する理由を知っている人はいますか?

4

1 に答える 1

2

まず、このようなエラーが発生した場合、問題がコードにあるのか、それとも解釈しようとしているデータにあるのかを判断するために、生の形式でデータを実際に確認することをお勧めします。

この場合の問題は、ファイル形式が異なることです。ディスク ユーティリティを使用して .dmg ファイルを作成すると、wikipedia ページで指定されている形式とは少しでも似ていません。

言い換えれば、コードは問題ありません。問題は、処理中のデータにあります。

.dmg ファイルの「ヘッダー」は、実際にはファイルの末尾に格納されていることがわかります - dmg2img などのツール - http://vu1tur.eu.org/tools/を使用して、データを適切に解析できます。さらに、使用しているヘッダーよりも優れたヘッダーの定義が含まれています

于 2012-06-28T14:27:03.697 に答える