我在向二进制文件写入和从二进制文件读取字节数据时遇到问题。
我正在编写char*
的数据,其数字形式如下:
32 16 19 23 23 84 23 16 19 23 23 84 0 0 0 0 0 0 83 8 6 1 22 21 20 0 66 120
但是当我尝试从文件中读取它时,我得到了这个:
0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 -1 -1 -1 -1 0 0 0 0 48 0 0 32
即使字节数相同,该值也完全不同。
这些是我的功能:
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*
,因此很多值可能被理解为特殊字符,但我不需要它们的含义。
答案 0 :(得分:0)
从您使用cipherText.byteArray
开始,它似乎是char*
。
cipherText.byteArray = memeblock;
使其指向与memeblock
相同的地址。当你删除那个缓冲区时,byteArray
指针不再指向任何地方(悬空指针)。
从该指针读取未定义的行为,会得到不可预测的结果。
在完成delete[]
之后,您不应该执行删除(或实际为byteArray
。