将空字符读入char数组以进行十六进制转换

时间:2014-10-14 10:48:05

标签: c++ arrays string

我正在编写一个程序,它从文本文件中读取输入并将其转换为十六进制以供以后处理。

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复制到数组中。也许它正确地复制它但十六进制转换不起作用。也许我不应该把它作为转换字符串发送。我不知道。我还注意到,当我尝试将文件中的样本粘贴到另一个文件时,所有空字符都被空格替换,也许它与此有关?

0 个答案:

没有答案