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】:

使用 stringstreamstd::hex

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

【讨论】:

我得到了以下信息:1500-030:(I)信息:std::num_get> >::_Getffld(char *, istreambuf_iterator > &, istreambuf_iterator > &, const locale &): 额外的优化可以通过重新编译和指定 MAXMEM 选项来获得更大的值大于 8192。【参考方案3】:

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

strtol strtoul

【讨论】:

以上是关于c ++将字符串转换为十六进制[重复]的主要内容,如果未能解决你的问题,请参考以下文章

C将int转换为字符串[重复]

在c中将字符串转换为int [重复]

为啥C ++允许将指向基对象的指针转换为派生类的指针[重复]

如何在c ++中将int数组转换为字节数组[重复]

将一个char数组转换为几个String [重复]

将UTC时间戳转换为C中的纪元时间[重复]