从文件中读取unsigned char的几种不同方法

时间:2012-12-16 19:36:20

标签: c++

我想从文件中读取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 //它有效但我不知道它做了什么。

2 个答案:

答案 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*