当我将ASCII转换为十六进制时,为什么会出现随机的新行? P> >我写了一个C++程序,在文本文件中读取,找到每个字符的数值ASCII值,然后将其转换成十六进制,然后将其输出到屏幕,但每当在C中出现十六进制值时,我就不断地插入这些新的新行。

当我将ASCII转换为十六进制时,为什么会出现随机的新行? P> >我写了一个C++程序,在文本文件中读取,找到每个字符的数值ASCII值,然后将其转换成十六进制,然后将其输出到屏幕,但每当在C中出现十六进制值时,我就不断地插入这些新的新行。,c++,encoding,hex,ascii,C++,Encoding,Hex,Ascii,下面是我用来转换为十六进制的代码: std::string HexConvert(char character) { char HEX[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; int ASCII = (int) character; if (ASCII > 255 || ASCII < 32) { return

下面是我用来转换为十六进制的代码:

std::string HexConvert(char character) {
    char HEX[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
    int ASCII = (int) character;
    if (ASCII > 255 || ASCII < 32) {
        return "20";
    } else {
        std::vector<char> binaryVec = binaryConvert(ASCII);
        std::string binaryVal(binaryVec.begin(), binaryVec.end());
        binaryVal = binaryVal.substr(binaryVal.length() - 8, 8);
        std::string bin1 = binaryVal.substr(0, 4);
        std::string bin2 = binaryVal.substr(4, 4);
        int hex1 = ((bin1[0] - 48)*8) + ((bin1[1] - 48)*4) + ((bin1[2] - 48)*2) + ((bin1[3] - 48)*1);
        int hex2 = ((bin2[0] - 48)*8) + ((bin2[1] - 48)*4) + ((bin2[2] - 48)*2) + ((bin2[3] - 48)*1);
        char hexVal[2] = { HEX[hex1], HEX[hex2] };
        std::string hexValue(hexVal);
        return hexValue;
    }
}

简单地放弃整个东西,并以正确的方式将ASCII转换为十六进制,而不是找出错误,这会更快

std::ostringstream o;

o << std::hex << std::uppercase << std::setw(2) << std::setfill('0') << ASCII;

return o.str();

您忘记了字符串的终止空字节

char hexVal[3] = { HEX[hex1], HEX[hex2], 0 };

如果没有终止null,您将遇到未定义的行为;任何事情都有可能发生。

我是否需要此ostringstream的任何其他包含项?您将需要,而且,不要认为还需要任何其他内容。如果有任何疑问,请检查你的C++参考手册。似乎不喜欢STD::填充-它需要3个参数,但只有一个。谢谢它解决了问题。请不要张贴文本图片。