您好 我有一个字符串解析器,它接收十六进制数作为其输入: 例如: 字符串X =“0x120005f38”
正如您所看到的数字是HEX,如何将其转换为无符号长?
如果这是基于十进制的字符串,我可以将字符串用于unsigned long函数。 我猜有几个步骤,我不确定使用什么顺序或功能。 1)我需要将十六进制转换为十进制 2)和String into unsigned long。
这对我来说似乎很棘手,任何想法?
答案 0 :(得分:7)
使用strtoul
:
strtoul("0x120005f3", 0, 0);
关于cplusplus.com的 strtoul
参考。请参阅Codepad上的工作原理。
编辑:已更改为strtoul
,但没有注意到unsigned long
是必需的。
答案 1 :(得分:1)
您可以指定strtoul
函数的base
参数,该参数允许字符串上有0x
前缀。
答案 2 :(得分:1)
使用流:
#include <iostream>
#include <sstream>
int main()
{
const char* X="0x120005f38";
std::stringstream ss(X);
long long var; //your value is too large for my long
ss >> std::hex >> var;
std::cout << var << ' ' << std::hex << var << '\n';
}
答案 3 :(得分:0)
如果这确实是你的代码,只是不要使它成为带有0x前缀的文字整数:int x = 0x120005f38;