我在网上搜索过,但似乎并不能解决我的问题。基本上我有一个std::string
,它包含一个十六进制的内存地址(例如0x10FD7F04)。这个数字是从文本文件中读取的,显然保存为std::string
。
我需要将此字符串转换为int值,但保留十六进制表示法, 0x 。有没有办法做到这一点?
答案 0 :(得分:4)
我需要将此字符串转换为int值,但保留十六进制表示法0x。有没有办法做到这一点?
您的问题分为两部分:
将字符串十六进制表示转换为整数。
std::string your_string_rep{ "0x10FD7F04" };
std::istringstream buffer{ your_string_rep };
int value = 0;
buffer >> std::hex >> value;
在结果值上保留十六进制表示法。这不是必需/可能的,因为int已经是十六进制值(以及十进制值和二进制值,具体取决于您如何解释它)。
换句话说,使用上面的代码,你可以写:
assert(value == 0x10FD7F04); // will evaluate to true (assertion passes)
答案 1 :(得分:2)
您可以使用C ++ 11 std::stoi
功能:
#include <iostream>
#include <iomanip>
#include <string>
int main()
{
std::string your_string_rep{"0x10FD7F04"};
int int_rep = stoi(your_string_rep, 0, 16);
std::cout << int_rep << '\n';
std::cout << std::hex << std::showbase << int_rep << '\n';
}
输出:
285048580
0x10fd7f04
答案 2 :(得分:1)
或者你也可以使用这样的东西
std::string hexstring("0x10FD7F04");
int num;
sscanf( hexstring.data(), "%x", &num);