我有一个.d64文件,我必须从中读取文件名。
在文件中,为文件名分配了〜16个字符,但大多数时候名字短于16个字符,这就留下了文件的名称+很多未签名的字符。
using namespace std;
void print_index() {
int disk_id = 0;
string disk_name;
fstream d64(d64_file, ios::in | ios::binary);
d64.seekg(sys.get_position(18, 0) + 143);
disk_name.resize(19);
d64.read(reinterpret_cast<char*> (&disk_name[0]), 19);
d64.seekg(sys.get_position(18, 0) + 163);
d64.read(reinterpret_cast<char*> (&disk_id), 1);
cout << endl;
cout << "Disk name :" << disk_name << endl;
cout << "Disk id : " << hex << disk_id << endl << endl;
cout << "## " << "Name" << setw(20) << "Type" << setw(10) << "Size" << setw(10)
<< "Track" << setw(10) << "Sect" << endl;
cout << "==============================================================" << endl;
d64.close();
}
这里我从文件中读取文件名,结果是&#34; EUREKA ????? .....&#34;
我只需要一些方法来识别未签名的字符!
答案 0 :(得分:0)
你 读取19个字节,而不关心字符串的实际长度。所有这19个字节都将放在字符串中,没有问题。
因此,当您打印字符串时,它将在字符串中打印所有19个“字符”。
另请注意,阅读disk_id
的电话可能无法完全按预期工作。如果它是单个字节,则将其读入uint8_t
,然后根据需要将其转换/分配给int
。