0

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

4

2 回答 2

1

read 函数声明了一个 'char *' 的原型。这正是一些作者在时间的迷雾中所做的。这并不意味着会发生任何“转变”。在任何情况下,都没有从 char * 到 unsigned char * 的“转换”;两者都是指向字节的指针,并且 I/O 类的任何转换语义都将受其他因素控制。

于 2012-12-16T19:48:33.257 回答
1

对于第一部分,构造函数还需要一个文件名。例如,

ifstream input("myfile.dat", ios::in | ios::binary);

我相信您可以省略ios::in,因为它是ifstream.

对于第二部分,istream::read需要一个char*指针(或某种等效类型)。读取数据后,您可以将元素转换为unsigned char*.

于 2012-12-16T19:55:37.423 回答