gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 21:39:06 27 4
gpt4 key购买 nike

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

示例:

  • 假设我有两个数字,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++ 中的字符串累加器。

最佳答案

要找到原因,您必须研究 ASCII 字符代码。

如果将 8 转换为十六进制,您将得到 0x38。与 6 类似,您将得到 0x36。

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

关于c++ - C++ 中字符串到十六进制值的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41033559/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com