使用c ++读取二进制文件时出错

时间:2013-03-19 10:55:52

标签: c++ binary int

我尝试读取包含charint&的二进制文件标题后的double

// open file
int pos = 0,n;
char str1,str2;

//string str;
ifstream fid(pfad.c_str(),std::ios::binary);
if (fid.good() != 1) {
    printf(" ++ Error: The elegant bunch file %s doesn't exist.\n",pfad.c_str());
    return 1;
}

// cut the header
while (pos<5) {
    if (fid.eof()) {
        printf(" ++ Error: elegant bunch file is strange\n");
        return 1;
    }

    fid >> str1;

    switch (pos) {
        case 0: str2 = '&'; break;
        case 1: str2 = 'd'; break;
        case 2: str2 = 'a'; break;
        case 3: str2 = 't'; break;
        case 4: str2 = 'a'; break;
    }

    if (str1 == str2){
        pos ++;
    } else {
        pos = 0;
    }
}

   // Read out the data
   fid.seekg(19,ios_base::cur);

std::cout << fid.tellg() << std::endl;
fid >> n;
std::cout << fid.tellg() << std::cout;


printf("\n\n%i\n\n",n);
printf("\nOK\n");
return 0;

我的fid >> str1阅读字符很好用。如果我尝试用int来做这件事,它会产生某种奇怪的行为。然后输出

813

-10x6c4f0484

0

因此第一个数字是文件中的位置,第二个数字应该是相同的,但它看起来像是指向我的指针。任何人都可以试着澄清我的困惑吗?

提前致谢。

1 个答案:

答案 0 :(得分:1)

std::operator>>(std::istream&, int&)尝试从字符流中解析一个整数,它不会读取二进制数据。您需要使用std::istream::read(char*, std::streamsize)功能。