我正在编写一个程序,它从文本文件中读取输入并将其转换为十六进制以供以后处理。
ifstream fin("input.txt"); //open file with ifstream
if(fin.is_open()){ //check if file is open
for(int i = 0; i<length; i++){ //int length for how many characters I need
fin.get(buffer[i]); //write into char array buffer[256]
}
}
else{
cout<<"Can't open file";
exit(0);
}
fin.close();
所以一切都很好,它很好地打开并从那里得到完全多少的字符,后来我用一个函数把它变成十六进制字符串:
std::string string_to_hex(const std::string input)
{
static const char* const lut = "0123456789ABCDEF";
size_t len = input.length();
string output;
output.reserve(2 * len);
for (size_t i = 0; i < len; ++i)
{
const unsigned char c = input[i];
output.push_back(lut[c >> 4]);
output.push_back(lut[c & 15]);
}
return output;
}
也可以正常工作,它为我得到的字符提供了正确的十六进制值。
现在问题是:我的文件包含空字符(十六进制“00”字符又名'\ 0'),我需要读入我的程序并进行正确的转换,以便转换后我的数组中的每个空字符都应该看起来喜欢“00”。每次我 尝试将我的数组中的空字符转换为空格(十六进制“20”),这会破坏我的数据以便以后处理。将“20”更改为“00”也不是一个选项,因为该文件包含也需要正确处理的实际空格。
这是我第一次使用空字符,我对如何正确处理它们感到困惑。我所知道的是,在字符串或数组的末尾使用空字符,所以当我将它们打印出来时,程序会知道何时停止。
我不知道应该如何正确地做到这一点。我尝试使用fopen
以不同方式打开文件,我尝试将input.txt复制到数组中。也许它正确地复制它但十六进制转换不起作用。也许我不应该把它作为转换字符串发送。我不知道。我还注意到,当我尝试将文件中的样本粘贴到另一个文件时,所有空字符都被空格替换,也许它与此有关?