字符串到十六进制而不改变数字,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;
}
66
42
在做项目时,我发现自己想知道如何将字符串转换为十六进制。不仅仅是将字符串“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;
}
66
42