在unsigned char处裁剪字符串

时间:2014-03-28 12:52:08

标签: c++

我有一个.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;

我只需要一些方法来识别未签名的字符!

1 个答案:

答案 0 :(得分:0)

读取19个字节,而不关心字符串的实际长度。所有这19个字节都将放在字符串中,没有问题。

因此,当您打印字符串时,它将在字符串中打印所有19个“字符”。


另请注意,阅读disk_id的电话可能无法完全按预期工作。如果它是单个字节,则将其读入uint8_t,然后根据需要将其转换/分配给int