c ++将字符串转换为十六进制

Hom*_*mer 5 c++ string hex

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

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

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

编辑:获取unsigned char格式的二进制文件信息.所以它的0x5f ...好像有相同格式的字符串

Yoc*_*mer 14

使用stringstreamstd :: hex

std::stringstream str;
std::string s1 = "5f0066";
str << s1;
int value;
str >> std::hex >> value;
Run Code Online (Sandbox Code Playgroud)


Naw*_*waz 12

使用std:stoi如(在C++ 11只):

std::string s = "5f0066";
int num = std::stoi(s, 0, 16);
Run Code Online (Sandbox Code Playgroud)

在线演示

  • 诸如0xffeeddcc之类的无符号整数可能会抛出std :: out_of_range。修复:使用std :: stoul (2认同)
  • 如果字符串太长,它不会转换为正确的数字(int 不能容纳这么多)。我真的不喜欢这个答案。 (2认同)

Cyg*_*sX1 6

strtol(str, NULL, 16)或者strtoul(str, NULL, 16)应该做你需要的.

strtol strtoul