我尝试获取dmg文件的标题。我看到了这个a link
那对我很有帮助。
因此,我编写了一个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

我不知道为什么除了第一个值之外我所有的值都为空。
我的dmg文件很好,我可以打开它。
有人知道我为什么会得到空值吗?

最佳答案

首先,当您遇到这样的错误时,最好以原始格式查看数据,以确定问题是否出在您的代码或试图解释的数据上。

在这种情况下,您的问题是文件格式不同-使用磁盘实用程序创建.dmg文件时,它看起来甚至与Wikipedia页面中指定的格式略有不同。

换句话说-您的代码很好,问题出在它正在处理的数据上。

事实证明,.dmg文件的“标题”实际上存储在文件的末尾-诸如dmg2img - http://vu1tur.eu.org/tools/之类的工具可以用来适当地解析数据;另外,它包含的 header 定义比您使用的 header 更好

关于c++ - header Apple磁盘镜像,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11244239/

10-11 22:46