以十六进制数转换std :: string数

时间:2014-09-05 11:52:27

标签: c++ hex

我在网上搜索过,但似乎并不能解决我的问题。基本上我有一个std::string,它包含一个十六进制的内存地址(例如0x10FD7F04)。这个数字是从文本文件中读取的,显然保存为std::string

我需要将此字符串转换为int值,但保留十六进制表示法, 0x 。有没有办法做到这一点?

3 个答案:

答案 0 :(得分:4)

  

我需要将此字符串转换为int值,但保留十六进制表示法0x。有没有办法做到这一点?

您的问题分为两部分:

  1. 将字符串十六进制表示转换为整数。

    std::string your_string_rep{ "0x10FD7F04" };
    std::istringstream buffer{ your_string_rep };
    int value = 0;
    buffer >> std::hex >> value;
    
  2. 在结果值上保留十六进制表示法。这不是必需/可能的,因为int已经是十六进制值(以及十进制值和二进制值,具体取决于您如何解释它)。

  3. 换句话说,使用上面的代码,你可以写:

        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);