バイナリファイルの読み込みに問題があります。私は文字列を含むバイナリファイルを読むと完全に読み込まれます。しかし、私がこのようなものを読んでみると、intのバイナリファイルを文字列C++に読み込む
1830 3030 3030 3131 3031 3130 3000 0000
0000 0000 0000 0000 1830 3030 3030 3131
3030 3030 3100 0000 0000 0000 0000 0000
1830 3030 3030 3131 3030 3131 3000 0000
0000 0000 0000 0000 1830 3030 3030 3131
3031 3030 3000 0000 0000 0000 0000 0000
1830 3030 3030 3131 3031 3131 3100 0000
0000 0000 0000 0000 1830 3030 3030 3131
3130 3130 3100 0000 0000 0000 0000 0000 ... and so on
それだけの部分が読み込まれます。これはバイナリファイルを読み込んで文字列に変換するコードです。
string toString (const char *c, int size);
int main(int argc, char* argv[])
{
streampos size;
char * memblock;
ifstream file (argv[1], ios::in|ios::binary|ios::ate);
size = file.tellg();
memblock = new char[size];
file.seekg (0, ios::beg);
file.read (memblock, size);
file.close();
string input = toString(memblock,size);
cout << input << endl; //this prints just portion of it 000001101100
return 0;
}
string toString (const char *c, int size)
{
string s;
if (c[size-1] == '\0')
{
s.append(c);
}
else
{
for(int i = 0; i < size; i++)
{
s.append(1,c[i]);
}
}
return s;
}
しかし、0と1のtxtファイルを読み込もうとすると、うまく読み込まれます。 私はC++にはかなり新しく、なぜそうは分かりません。
このデータをどのように出力するかを教えていただいた場合は、どのように表示するかを示すコードを書くことができます。 –
また、memblock変数に割り当てられたメモリを解放していないようです。 – kyku
hmm ...私は実際にこのファイルをLZWで別の.binファイルを圧縮するのを手に入れました。私はそれを.binに圧縮すると1830 3030 3030 3131が得られますが、.txtに圧縮されると000001101100が得られます。したがって、.binの部分は.txtと同じです。私が.txtファイルを解凍すると、私は間違いなくオリジナルを得る。しかし、私はそれがちょうどあるので、.binを解凍することはできません。私は読書に何かがあったと思っていました。 – mihcc