字符串到十六进制而不改变数字,C++

String to Hex without changing number, C++

在做项目时,我发现自己想知道如何将字符串转换为十六进制。不仅仅是将字符串“42”转换为十六进制 0x3432。

我很好奇您如何将字符串“0x42”转换为十六进制 0x42。比如,假设给定的字符串是一个有效的十六进制数(我知道这是一个很大的假设,但请接受它......)。我想将其用作十六进制数,而不是字符串。我将如何进行转换?

这不是我会做的事情...我只是更好奇它是否会完成以及如何完成,因为直到现在我从未 运行 遇到过此类问题。

*使用 C 和 C++

像这样:

#include <string>
#include <iostream>

int main()
{
    std::string s = "0x42";
    int i = std::stoi( s, nullptr, 16 );
    int j = strtoul( s.substr(2).c_str(), nullptr, 16 );
    std::cout << i << "," << j << "\n";
}

请注意,std::stoi 将处理前导“0x”。 strtoul 比较挑剔。

因为这只是同一个值的不同表示的问题,它的 IO 流提供这样的“转换”:

#include <sstream>
#include <iostream>

int main() {
    std::stringstream ss{"0x42"};
    int x = 0;
    ss >> std::hex >> x;
    std::cout << x << "\n";
    std::cout << std::hex << x;
}

Output:

66
42