gpt4 book ai didi

c++ - 为什么 fstream.read 和 fstream.write 使用 char 而不是 unsigned char?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:43:13 25 4
gpt4 key购买 nike

据我所知,read()write() 在那里,所以我们可以直接从文件读取字节或向文件写入字节,我被教导byte 在 c++ 中的等价物是 unsigned char,那么为什么他们将 char 指针作为参数?

此外,请从我发现的“bmp 文件图像阅读器”库中查看此函数:

bool BMPImage::readInfo()
{
//...

//read bmp and dib headers
unsigned char header[28] = {0};
_ifs->read((char*)header, 28);
_width = *(int*)&header[18]; //width is located in [18] and is 4 bytes size
_height = *(int*)&header[22]; //height is located in [22] and is 4 bytes size
_bpp = (unsigned char) *(short*)&header[28]; //bpp is located in [28] and is 2 bytes size
_channels = _bpp / 8; //set num channels manually

//...

为什么 _ifs->read() 行仍然有效?从 unsigned char 到 char 的强制转换会导致数据丢失,不是吗?

最佳答案

在 C 和 C++ 中,标准没有指定 char 是有符号的还是无符号的,实现可以自由地实现它。有不同的类型 signed char(保证至少保持范围 [-127,127])和 unsigned char(保证至少保持范围 [0,255]),和char 将等同于其中之一,但它是由实现定义的。

鉴于 ASCII 字符集仅包含 0 到 127 的值,从历史上看,单个带符号字节被视为足以容纳单个字符,同时仍使用与较大类型相同的约定,这是有道理的,其中除非明确声明为 unsigned,否则默认情况下整数类型是有符号的。

关于c++ - 为什么 fstream.read 和 fstream.write 使用 char 而不是 unsigned char?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45194333/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com