将std::字符串数字转换为十六进制数字

Convert std::string number in hexadecimal number

本文关键字:十六进制数字 转换 字符串 std 数字      更新时间:2023-10-16

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

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

您可以使用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

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

你的问题有两部分:

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

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

换句话说,使用上面的代码,您可以只写:

    assert(value == 0x10FD7F04); // will evaluate to true (assertion passes)

或者,您可以使用类似的东西

std::string hexstring("0x10FD7F04");
int num;
sscanf( hexstring.data(), "%x", &num);