C++字符串转换为十六进制

10

可能重复:
C++将十六进制字符串转换为带符号整数

我已经在谷歌上搜索了,但没有找到任何帮助。 所以这是我的问题: 我有包含十六进制代码的字符串,例如:string s1 =“5f0066” 我想将此字符串转换为十六进制。 我需要将字符串与从二进制文件中读取的十六进制代码进行比较。

(只需要基本的想法如何转换字符串) 5f 最好的问候和感谢。

编辑:以无符号字符格式获得了二进制文件信息。所以它是0x5f... 希望以相同的格式获得字符串


2
如果一个字符串已经是十六进制,那么“想要将这个字符串转换为十六进制”是什么意思? - Alessandro Pezzato
<cstdlib> 中的 strtol() 函数?我只是猜测,因为你的问题不是很清楚。 - DevSolar
如果你是从文件中读取这些字符串(特别是从 std::ifstream 中),那么这篇文章可能比上面发布的重复问题更好。 - jogojapan
3个回答

19

3
一个未被签名的整数,例如0xffeeddcc很可能会引发std::out_of_range异常。解决方法:使用std::stoul。 - Sundae
2
如果字符串太长,它将无法转换为正确的数字(int 无法容纳太多)。我不是很喜欢这个答案。 - David 天宇 Wong

14

使用 stringstreamstd::hex

std::stringstream str;
std::string s1 = "5f0066";
str << s1;
int value;
str >> std::hex >> value;

我得到了以下信息: 1500-030: (I) 信息:std::num_get<char,std::istreambuf_iterator<char,std::char_traits<char> > >::_Getffld(char *, istreambuf_iterator<char,std::char_traits<char> > &, istreambuf_iterator<char,std::char_traits<char> > &, const locale &):通过重新编译并指定MAXMEM选项,可以获得额外的优化,其值大于8192。 - Vincent Guyard

7

strtol(str, NULL, 16)strtoul(str, NULL, 16) 可以满足您的需求。

strtol strtoul


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接