c ++将字符串转换为十六进制[重复]
Posted
技术标签:
【中文标题】c ++将字符串转换为十六进制[重复]【英文标题】:c++ convert string to hex [duplicate] 【发布时间】:2012-07-21 11:21:26 【问题描述】:可能重复:C++ convert hex string to signed integer
我已经在谷歌上搜索过,但没有找到任何帮助。 所以这是我的问题: 我有已经包含十六进制代码的字符串,例如:string s1 = "5f0066" 我想将此字符串转换为十六进制。 我需要将字符串与我在二进制文件中读取的十六进制代码进行比较。
(只需要知道如何转换字符串的基本思路) 5f 最好的问候和感谢。
编辑:得到无符号字符格式的二进制文件信息。所以它的0x5f ... 希望有相同格式的字符串
【问题讨论】:
如果它们已经是十六进制,“想要将此字符串转换为十六进制”是什么意思?strtol()
来自<cstdlib>
?只是猜测,你的问题不是很清楚。
如果您从文件中读取这些字符串(特别是从std::ifstream
),this 可能比上面发布的重复问题更好。
【参考方案1】:
将std:stoi
用作(仅在 C++11 中):
std::string s = "5f0066";
int num = std::stoi(s, 0, 16);
Online demo
【讨论】:
诸如 0xffeeddcc 这样的无符号整数可能会抛出 std::out_of_range。修复:使用 std::stoul 如果字符串太长,它不会转换为正确的数字(int 不能容纳这么多)。我不太喜欢这个答案。【参考方案2】:使用 stringstream 和 std::hex
std::stringstream str;
std::string s1 = "5f0066";
str << s1;
int value;
str >> std::hex >> value;
【讨论】:
我得到了以下信息:1500-030:(I)信息:std::num_getstrtol(str, NULL, 16)
或 strtoul(str, NULL, 16)
应该可以满足您的需求。
strtol strtoul
【讨论】:
以上是关于c ++将字符串转换为十六进制[重复]的主要内容,如果未能解决你的问题,请参考以下文章