ifstream从二进制文件中读取的数据与预期不同
ifstream reads different data from binary file than expected
我在二进制文件中写入和读取字节数据时遇到问题。我正在写一个char*
的数据,它看起来像这样的数字形式:
32 16 19 23 23 84 23 16 19 23 84 0 0 0 0 83 8 6 1 22 21 20 0 66120
但当我试图从文件中读取它们时,我得到了这个:
0 0 0 0
即使字节数相同,但值却完全不同。
这些是我的功能:
void writeCipherTextToFile(std::string fileName, BYTE_CIPHER_TEXT cipherText) {
std::ofstream file(fileName, std::ios::binary);
if (file.is_open()) {
file.write(cipherText.byteArray, cipherText.count);
file.close();
} else {
std::cout << "Error: Can't write file named " << fileName << std::endl;
exit(1);
}
}
BYTE_CIPHER_TEXT readCipherTextFromFile(std::string fileName) {
std::ifstream file(fileName, ios::in|ios::binary|ios::ate);
std::streampos size;
BYTE_CIPHER_TEXT cipherText;
char* memeblock;
if (file.is_open()) {
size = file.tellg();
file.seekg(0, std::ios::beg);
cout << "size: " << size<<endl;;
memeblock = new char[size];
file.read(memeblock, size);
file.close();
cipherText.byteArray = memeblock;
cipherText.count = size;
delete memeblock;
} else {
std::cout << "Error: Can't read file named " << fileName << std::endl;
exit(1);
}
return cipherText;
}
我发现了很多关于ifstream
奇怪行为的问题,但这些问题都与性格有关。我不想得到它们的ASCII等价。我想将原始数据读取到char*
,这样很多值可能会被理解为特殊字符,但我不需要它们的含义,只需要它们的值。
从您对cipherText.byteArray
的使用来看,它似乎是一个char*
。
CCD_ 6使其指向与CCD_ 7相同的地址。当您删除该缓冲区时,byteArray
指针不再指向任何位置(悬空指针)。
从该指针中读取是未定义的行为,会得到不可预测的结果。
在使用完byteArray
之前,不应该执行删除操作(实际上是delete[]
)。
相关文章:
- 如何使用位字段将数据从二进制文件复制到结构中?
- C++ 尝试优化每一帧将数据打印到二进制文件
- 如何在二进制文件上附加数据?
- 在二进制文件中写入对齐的数据
- 如何在二进制文件中组织数据?
- Python API用于解析包含数组格式的protobuf数据的二进制文件
- 使用平面缓冲区读取以前写入的二进制文件的数据
- 如何仅使用 std::filebuf 将数据(二进制模式)写入文件
- 如何从 linux 二进制文件中存储和检索数据
- 二进制文件中的某些数据如图所示,并以奇怪的方式显示OS
- 如何在结构中存储二进制文件数据
- 保存和加载类数据存储在C 中的二进制文件中
- 通过Google Protobuf发送二进制文件数据
- 从二进制文件C++更新数据
- 在C++中使用 CArchive 类从二进制文件中读取短数据
- 如何使用dlang读取二进制文件数据
- 将敏感数据存储在C 编译的二进制文件中是否安全
- 检测二进制文件数据的端性
- 在 VC++ 中将类数据读取和写入二进制文件
- 用于存储数据的结构和外部二进制文件