使用Fstream读取二进制文件
Reading binary file with fstream
我正在阅读带有fstream的二进制文件,并将信息存储在一个字符中:
int dataLength = 32;
int counter = 0;
char data[dataLength];
char PMTone[dataLength/4];
std::fstream *fs = new std::fstream(inputFileName,std::ios::in|std::ios::binary);
fs->read((char *)&data, dataLength);
//of the 32 characters in data[], I need first, 5th etc elements:
//fill first pmt info
for(int i=0; i<(dataLength/4); i++){
PMTone[i]=data[counter];
counter+=4;
}
现在,我将PMTONE [7]设置为一个测试:
PMTone[7] = "a";
我得到错误:
mdftree.cpp:92:21:错误:从" const char*"转换为无效 " char" [-fpermissive]
我不明白为什么pmtone []中的元素是char的指针,当pmtone []被定义为chars数组时。
当我确实将pmtone []视为一系列指针时:
(*PMTone)[7] = "a";
我得到了另一个我不明白的错误:
mdftree.cpp:91:18:错误:无效类型的" char [int]"数组 下标
这似乎暗示编译器根本不认为PMTONE []是一个数组,而只是指向字符的指针。
任何人都可以阐明这里发生的事情吗?为什么PMTONE []成为炭的一系列指针?
字面的 "a"
不是字符。
您需要:
PMTone[7] = 'a';
"a"
不是字符,它是字符数组,'a',其次是null终结者。
您需要
PMTone[7] = 'a';
带单引号。顺便说一句,我很惊讶它较早地编译,因为数据未称为const。
PMTone
本身是类型char[8]
,它是字符数组。但是,它衰减到指针,而(*PMTone)
是第一个元素,类型char
数组是通过具有第一个元素的地址并访问索引的其他元素来存储值的一种方式。数组基本上是指第一个元素的指针。
创建chars
char arr[n];
程序实际上为内存中的n个字符创建空间。
访问arr[0]
时,请说这样的话:
arr[2] = 'a';
程序实际上是这样做的:
*(arr + 2) = 'a';
表示您正在访问一个字符,该字符与数组中第一个元素的内存位置更进一步(因此,arr + 2
),第一个元素是arr[0]
。第一个元素的地址是&(arr[0])
或arr
。两者都是相同的值。
错误是您尝试将字符串"a"
保存到char
中的地方。
问题是您尝试通过取消给出的指针来修复它:
(*PMTone)[7] = "a"; // is the same as
(PMTone[0])[7] = "a"; // when it should be
PMTone[7] = 'a';
- 如何在 c++ 中将二进制文件读取为字符串
- 从二进制文件读取到数组:前面的任意数字
- 提升二进制文件读取错误不支持的版本
- 无法将二进制文件读取到 std::vector<std::byte> 中C++
- 提升序列化在从二进制文件读取时引发异常
- 从二进制文件 C++ 读取的字符串数组写入
- 将二进制文件读取到 std::vector<bool>
- 将fortran生成的二进制文件读取到C++中的带符号整数数组中
- 将从二进制文件读取的字符串转换为整数
- 从/到C 的二进制文件读取和写作整数
- 通过将结构信息从二进制文件读取到数组中,然后返回到文件C
- 将 int 的二进制文件读取到字符串 c++
- 将结构从二进制文件读取到链表,导致无限循环
- 将二进制文件读取到向量元素的地址中
- c++从二进制文件读取/写入类
- Python:将二进制文件读取到一个结构中,然后拆包
- 从二进制文件读取/写入十六进制字节
- 简单的 C++ 二进制文件读取
- 从二进制文件 c++ 读取 16 位整数
- 如何优化c++二进制文件读取