当我将ASCII转换为十六进制时,为什么会出现随机的新行?

时间:2016-11-17 21:29:07

标签: c++ encoding hex ascii

所以我正在编写一个C ++程序来读取文本文件,找到每个字符的数字ASCII值并将其转换为十六进制,然后将其输出到屏幕但我不断插入这些随机的新行每当十六进制值结束于' C'来了。

Screenshot of console output

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

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;
    }
}

2 个答案:

答案 0 :(得分:2)

简单地废弃整个内容并以正确的方式将ASCII转换为十六进制更快,而不是找出错误。

std::ostringstream o;

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

return o.str();

答案 1 :(得分:0)

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

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

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