gpt4 book ai didi

C++ 在读取 Hex 和将 Hex 写入文件时遇到问题

转载 作者:行者123 更新时间:2023-11-28 02:32:35 46 4
gpt4 key购买 nike

所以我试图从十六进制文件中读取,修改十六进制值,将新的十六进制值写入新文件。然后打开新文件,再次修改十六进制并重写到第三个文件。我正在对十六进制值进行非常简单的加密。

我用来阅读的函数是休闲的:

vector<unsigned char> readFile(istream& file){
vector<unsigned char> returnValue;
//grab first 32 values from infile
for(int i = 0; i < 32 && !file.eof(); i++) {
returnValue.push_back(file.get());
}
return returnValue;
}

我用来写的函数如下:

void WriteVectorU8(ostream &file, vector<u8> bytes, bool isEncrypt){
for(int i = 0; i < bytes.size(); i++){
u8 byteToWrite = isEncrypt ? encrypt(bytes[i] , curKey[keyPointer]) : decrypt(bytes[i], curKey[keyPointer]);
incKeyPointer();
if(i != 0 && i%2 == 0){
file << " ";
}
file << hex << setw(2) << setfill('0') << int(byteToWrite);

}
file << endl;
}

这是我打开文件的方式:

ofstream outFile;
outFile.open("tempName.bin", ios::binary);

我看到的是我打开的第一个文件被正确读取,即 file.get() 返回一个有效的十六进制值。这方面的一个例子是文件中的值 48ff,get() 以十六进制形式检索 48 或以 int 形式检索 72。我还可以看到我的加密文件是用十六进制正确写入的,但是当我去阅读我新创建的加密文件时,假设其中的第一个值是 81a4 我只得到第一个字符,'8' 而不是十六进制我期望并能够从我没有创建的第一个文件中获得的值“81”。

最佳答案

ostream << operator写入格式化文本,而不是原始数据。对于您正在尝试的内容,您需要使用 ostream::write() 方法代替:

void WriteVectorU8(ostream &file, vector<u8> bytes, bool isEncrypt){
for(int i = 0; i < bytes.size(); i++){
u8 byteToWrite = isEncrypt ? encrypt(bytes[i] , curKey[keyPointer]) : decrypt(bytes[i], curKey[keyPointer]);
incKeyPointer();
file.write((char*)&byteToWrite, 1);
}
}

你也在滥用 eof()在你的readFile()功能(在尝试先阅读某些内容之前,您无法检查 eof)。它应该更像这样:

vector<unsigned char> readFile(istream& file){
vector<unsigned char> returnValue;
//grab first 32 values from infile
for(int i = 0; i < 32; i++) {
char ch = file.get();
if (!file) break;
returnValue.push_back(ch);
}
return returnValue;
}

或者:

vector<unsigned char> readFile(istream& file){
vector<unsigned char> returnValue;
//grab first 32 values from infile
char ch;
for(int i = 0; (i < 32) && (file.get(ch)); i++) {
returnValue.push_back(ch);
}
return returnValue;
}

关于C++ 在读取 Hex 和将 Hex 写入文件时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28551968/

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