将字符串转换为char * [string has'0']

时间:2016-03-02 21:02:42

标签: c++ string char

如何将十六进制字符串转换为字符串,同时保持字符串中的零和?我现在正在......

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>,有任何修复建议吗?

感谢

1 个答案:

答案 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

是一个控制序列,而不是你想要转换的东西。