如何将十六进制字符串转换为字符串,同时保持字符串中的零和?我现在正在......
std::string hex = "202020202020202038373c425245414b3e3c50434120546f204152542057443e150080000000000100154007000f5043412057442046524f4d204c50430001000000002d08000000003c2f50434120546f204152542057443e3c2f425245414b3e";
int len = hex.length();
std::string newString;
for (int i = 0; i< len; i += 2)
{
std::string byte = hex.substr(i, 2);
char chr = (char)(int)strtol(byte.c_str(), NULL, 16);
newString.push_back(chr);
}
//std::cout << newString;
char *sendBuf;
sendBuf = new char[newString.size() + 1];
strcpy_s(sendBuf, newString.size() + 1, newString.c_str());
std::cout << sendBuf;
但是这给了我一个输出,在'e150'之后一切都转换为第一个零。十六进制旨在转换为' 87<BREAK><PCA To ART WD>€@PCA WD FROM LPC-</PCA To ART WD></BREAK>'
但我得到87<BREAK><PCA To ART WD>
,有任何修复建议吗?
感谢
答案 0 :(得分:0)
我猜你还没有用来转换十六进制字符串的附加约定。
例如,如果您只是修改代码,添加if语句:
[...]
char chr = (char)(int)strtol(byte.c_str(), NULL, 16);
if ( chr < 10 )
continue;
[...]
输出将非常接近所需的输出:
87<BREAK><PCA To ART WD>§§@☼PCA WD FROM LPC-</PCA To ART WD></BREAK>
我相信原始hex
080000000000
是一个控制序列,而不是你想要转换的东西。