从文件中读取未签名字符的几种不同方法

several different ways to read unsigned char from file

本文关键字:几种 方法 读取 文件 字符      更新时间:2023-10-16

我想从文件中读取无符号字符并搜索许多不同的执行方式。但我不知道它们工作或不工作的原因。

1. ifstream input(ios::in | ios::binary) //seems to not work, but why?

我已经设置了应该阻止转换的ios::binary

阿拉伯数字。 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*?存储在数组中的数据不会转换为字符而不是unsigned char ?它在转换过程中做什么?

3. vector//它有效,但我不知道它做了什么。

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

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

我相信你可以省略ios::in,因为它是ifstream的默认值。

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

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