将十进制字符串转换为十六进制字符串而不将字符串转换为整数

Posted

技术标签:

【中文标题】将十进制字符串转换为十六进制字符串而不将字符串转换为整数【英文标题】:Convert decimal string to hex string without storing into interger 【发布时间】:2018-02-01 07:27:17 【问题描述】:

我有一个十进制值的字符串。我需要将其转换为十六进制值。我知道字符串需要先使用 stoi 转换为整数,然后使用 stringstream std::hex 转换为十六进制

std::string hexString(std::string decimalString)

    std::stringstream ss;
    int val = std::stoi(decimalString);
    ss << std::hex << val;
    return ss.str();

由于我需要字符串输出,有什么方法可以直接转换,而不需要先转换为整数再转换为十六进制。

【问题讨论】:

知道需要,问是否需要? 不在标准中,您可以花时间创建自己的,但我认为您的功能如果能满足您的需求就更好了。 我认为没有比将字符串转换为十进制数并将十进制数转换为十六进制更简单的方法了。我会等待有人证明我错了。 【参考方案1】:

当然可以,你可以直接在std::string上实现转换,通过将字符串字符操作为数字。但是,您必须对这些数字进行乘法和加法运算,这比让 CPU 执行要慢得多。

一般而言,通过映射在基数 A 和 B 之间进行有效转换仅在某些情况下是可能的,最简单的是当 B 是 A 的幂(或 B 的 A)时,例如,如果 A=2 和 B=4:

1101010010
 3 1 1 0 2

所以 1101010010-base2 变为 31102-base4,转换是通过将 base2 数字对映射到 base4 数字来完成的。请注意,这本质上是相同的,只是中间整数现在只有 2 位宽,但至少中间整数的宽度不取决于输入的宽度。

【讨论】:

以上是关于将十进制字符串转换为十六进制字符串而不将字符串转换为整数的主要内容,如果未能解决你的问题,请参考以下文章

lua语言 如何将字符串整体转换为一个十进制数据 而不按照每个字符转为若干个十进制数

如何将字符串转换为 12 位二进制而不改变它在 asp.net c# 中的值

mysql c api:插入数字而不将它们转换为字符串

从 MemoryStream 获取子字符串而不将整个流转换为字符串

减去字符串并转换为十进制而不四舍五入

Swift将十六进制字符串或字符转换为整数