【问题标题】:c++ convert string to hex [duplicate]c ++将字符串转换为十六进制[重复]
【发布时间】:2012-07-21 11:21:26
【问题描述】:

可能重复:
C++ convert hex string to signed integer

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

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

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

【问题讨论】:

  • 如果它们已经是十六进制,“想要将此字符串转换为十六进制”是什么意思?
  • strtol() 来自<cstdlib>?只是猜测,你的问题不是很清楚。
  • 如果您从文件中读取这些字符串(特别是从std::ifstream),this 可能比上面发布的重复问题更好。

标签: c++ string hex


【解决方案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

【讨论】:

    猜你喜欢
    • 2018-01-31
    • 2018-07-03
    • 2011-05-15
    • 2019-01-17
    • 2023-03-08
    • 2017-05-29
    • 2014-06-09
    • 2018-06-06
    • 1970-01-01
    相关资源
    最近更新 更多