私は、バイナリでディスクイメージファイルを読み込んで、各パーティション、そのタイプ、開始セクタとサイズを表示するためにパーティションエントリテーブルをチェックする小さなプログラムを書いています。バイナリファイルの全64バイトを読むにはどうすればよいですか?
これまでのところ、最初の16バイトは正確に読み取られましたが、残りのパーティションエントリは認識されないか、何らかのエラーがあります。 EDIT: 結果は、このような出力の最初の行はこのように見えるようになっている:私は
`Partition 0: Type: FAT-16 Start: 63 Size: 518760`
何をしないのですか?すべてのパーティションエントリが適切な結果を与えるようにコードを修正するにはどうすればよいですか?
using namespace std;
#include <iostream>
#include <fstream>
struct Partition { char type; int start_sect; int size; } part_entry[4]; // 4 x partition table entry
int main(int argc, char *argv[])
{
//DECLARATIONS
int i, offset = 26, not_exist = 0;
char buf_part_table[64], vol_type[12];
char* diskdata;
int n;
streampos begin, end;
ifstream diskimage;
diskimage.open("Sample_1.dd", ios::in | ios::binary | ios::out);
diskdata = new char[begin];
begin = diskimage.tellg();
diskdata = new char[begin];
diskimage.seekg(446, ios::beg);
diskimage.read(buf_part_table, 64);
for (i = 0; i < 4; i++)
{
part_entry[i].type = *(char*)(buf_part_table + 0x04 + (i * offset));
if (part_entry[i].type == 0) not_exist++;
part_entry[i].start_sect = *(int*)(buf_part_table + 0x08 + (i * offset));
part_entry[i].size = *(int*)(buf_part_table + 0x0C + (i * offset));
switch (part_entry[i].type)
{
case 00: strcpy(vol_type, "NOT-VALID");
break;
case 06: strcpy(vol_type, "FAT-16");
break;
case 07: strcpy(vol_type, "NTFS");
break;
case 0x0B: strcpy(vol_type, "FAT-32");
break;
default: strcpy(vol_type, "NOT-DECODED");
break;
}
cout << "Partition " << i << ":" << " Type:" << vol_type << " Start: " << part_entry[i].start_sect << " Size: " << part_entry[i].size << endl;
}
return 0;
}
テキストの画像を(特にリンクとして)掲載するのではなく、実際のテキストをテキストとしてテキストの本文にコピーして貼り付けてください。また、予期しない出力がある場合は、実際の出力だけでなく、期待される*出力も確認できます。 –
'buf_part_table + 0xXX +(i * offset)'と 'i == 3'は64バイトから離れています。 「オフセット」は26ではなく16でなければならない? – em2er
[テキストは画像に投稿されていません](https://meta.stackoverflow.com/q/303812/995714) –