ASCII十进制数存储在字符串中

时间:2018-11-25 14:04:48

标签: c++

字符串str_hex包含字母A-J的十六进制值,它对应于十进制值65-74。我正在尝试将每个十六进制值转换为其十进制值following this example。对于for循环内的std::cout情况,它很好用,但是输出std::string仍然具有ascii值。为什么这不起作用,或者有没有更好/更合适的方法来构建输出字符串?

#include <string>
#include <iostream>
#include <stdint.h>

int main()
{

    std::string str_hex("\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b", 10);
    std::string str_output = "";

    for (int i = 0; i < 10; ++i)
    {
        uint8_t tmp = str_hex[i];
        str_output.append(1, (unsigned)tmp);
        std::cout << "cout+for: " << (unsigned)tmp << std::endl;
        if(i<9)
            str_output.append(1, '-');
    }
    std::cout << std::endl << "cout+str_append: " << str_output  << std::endl;

    return 0;
}

编译并运行程序会得到以下输出:

cout+for: 65
cout+for: 66
cout+for: 67
...

cout+str_append: A-B-C-D-E-F-G-H-I-J

所需的输出是:

cout+str_append: 65-66-67-68-...

2 个答案:

答案 0 :(得分:1)

方法string::append在各种重载中接受size_tchar,请参见reference

  

string&append(size_t n,char c);

因此,在您的代码行中

str_output.append(1, (unsigned)tmp);

您正在将未签名的tmp隐式转换为字符,即单个字母。要获得所需的输出,必须将tmp转换为包含数字的字符串,然后将其附加到str_output。您可以使用

str_output+=std::to_string(tmp);

代替str_output.append(1, (unsigned)tmp);

答案 1 :(得分:0)

您必须将字符串append更改为从数字到其“字符串”的更改:

str_output.append(std::to_string(tmp));

这不是您要添加的字符,而是代表数字的字符串。