単純に見えるかもしれませんが、うまくいかない理由を見つけたいと思っています。私は2つの機能を持っていますread_file_cpp()
& write_file_cpp()
. read_file_cpp()
ファイルを読み取り、unsigned char ポインターに格納し、write_file_cpp()
unsigned char ポインターからファイルにデータを書き戻します。
しかし、ストリームを使用basic_ifstream<unsigned char>
またはbasic_ofstream<unsigned char>
ファイルすると、両方の関数がデータを読み書きできず、unsigned char ポインターの内容は変更されません。以下にコード スニペットを示します。
int read_file_cpp(unsigned char *pInData,
int in_len,
string file_name) {
basic_ifstream<unsigned char> file_stream;
file_stream.open(file_name.c_str(),ios::in | ios::binary);
if (!file_stream.is_open()) {
cout << stderr << "Can't open input file !\n";
exit(1);
}
else{
file_stream.read(pInData,in_len);
}
file_stream.close();
return 0;
}
int write_file_cpp(string file_name,
unsigned char *pOutData,
int out_len) {
basic_ofstream<unsigned char> file_stream;
file_stream.open(file_name.c_str(),ios::out | ios::binary | ios::trunc);
if (!file_stream.is_open()) {
cout << stderr << "Can't open output file !\n";
exit(1);
}
else{
file_stream.write(pOutData,out_len);
}
file_stream.close();
return 0;
}
しかし、ifstream
orを使用ofstream
して char ポインターに型キャストすると、両方の関数が正しく機能します。つまり、
int read_file_cpp(unsigned char *pInData,
int in_len,
string file_name) {
ifstream file_stream;
file_stream.open(file_name.c_str(),ios::in | ios::binary);
if (!file_stream.is_open()) {
cout << stderr << "Can't open input file !\n";
exit(1);
}
else{
file_stream.read((char *)pInData,in_len);
}
file_stream.close();
return 0;
}
正常に動作しています。basic_ifstream<unsigned char>
unsigned char ポインター型を作成または適切に動作させる方法、または またはを使用basic_ofstream<unsigned char>
するときに型キャストを回避する方法はありますか?ifstream
ofstream