字符串到C ++中的十六进制值转换

时间:2016-12-08 06:57:03

标签: c++ c

有没有一种方法可以将一些整数放入一个字符串中(通过连接),并且当该字符串逐字符读取并打印为十六进制时,这些数字的十六进制值等同于数字本身。

示例:

  • 假设我有两个数字,6和8以及一个字符串" yahoo"。

  • 在第一步中,我将它们连接起来并得到一个字符串 " 6yahoo8"使用snprintf()

  • 在下一步中,我逐字符地读取字符串并打印 超出他们的十六进制值,

  • 我希望获得最终输出:

    {0x06,0x79,0x61,0x68,0x6F,        0x6F,0x08}。

  • 但我的程序正在打印结果:

    {0x36,0x79,0x61,0x68,0x6F, 0x6F,0x38}。

    除第一个和最后一个字节外,此结果是正确的。 任何想法如何完成我想要的任务? 建议非常感谢。

    我用来形成字符串的程序:

    string encode_url() {
        StringAccum sa;
        string url;
        const char *str = "yahoo";
        int p = 6;
        int q = 8;
        sa.snprintf(1,"%x", p);   // snprintf(len, format, value);
        sa << str.c_str();
        sa.snprintf(1, "%x", q);
        url = string(sa.take_string().c_str());
        return url;
    }
    

    我们使用的一些习惯函数就像StringAccum,它基本上是C ++中的String Accumulator。

1 个答案:

答案 0 :(得分:0)

找到你必须查看ASCII字符代码的原因。

如果以十六进制转换8,则会得到0x38。类似于6你会得到0x36。

为什么你得到0x38而不是0x8因为这里的8是一个不是字符变量的字符串(比int更不明显的是普通整数类型的另一个,char。它基本上只是另一种int,但有不同的应用程序)。