当我将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个参数,但只有一个。谢谢它解决了问题。请不要张贴文本图片。