我想从文件中读取unsigned char并搜索许多不同的执行方式。但我不知道他们工作或不工作的原因。
1。
ifstream input(ios::in | ios::binary) //seems to not work, but why?
我设置了ios::binary
,以防止转换。
2。
unsigned char buffer[BUFFER_SIZE];
myfile.read((unsigned char *) buffer, BUFFER_SIZE);//error!fail
myfile.read((char *) buffer, BUFFER_SIZE);//work, the data type is unsigned char
为什么我必须将其转换为char*
?
存储在数组中的数据不会转换为char而不是unsigned char
?
转换期间它做了什么?
3。
vector
//它有效但我不知道它做了什么。
答案 0 :(得分:1)
read函数声明了'char *'的原型。这正是一些作者在时间的迷雾中所做的。这并不意味着任何“转换”将会发生。在任何情况下,都没有从char *到unsigned char *的“转换”;两者都是指向字节的指针,I / O类的任何转换语义都将受到其他因素的控制。
答案 1 :(得分:1)
对于第一部分,构造函数还需要文件名。例如,
ifstream input("myfile.dat", ios::in | ios::binary);
我相信您可以省略ios::in
,因为它是ifstream
的默认值。
对于第二部分,istream::read
需要char*
指针(或某种等效类型)。读取数据后,您可以将元素转换为unsigned char*
。