【问题标题】:How to convert a string containing a hexadecimal integer如何转换包含十六进制整数的字符串
【发布时间】:2011-06-01 15:36:38
【问题描述】:

我有一个字符串,例如包含 1000 我需要将它存储在一个名为 x 的变量中(例如) 所以整件事是我需要将字符串存储为十六进制基整数 这样如果我添加 3(例如)

1000+3=1003
1003+3=1006
1006+3=1009
1009+3=100C
100C+3=100F
100F+3=1012

【问题讨论】:

  • ???您使用的是 c++ 还是 Visual Basic(是 VB6 还是 VB.NET)?
  • 抱歉使用visual C++ 2008 Express版

标签: c++ string variables integer hex


【解决方案1】:

据我所知,您在字符串中有一个十六进制表示的数字,您希望将其放入int。然后,您希望能够添加到该 int,并再次以十六进制表示形式输出其新值以验证结果。

#include <sstream>
#include <ios>

int main() {
   std::string input = "1000";

   // Read the input string into a stream (streams have format conversion functionality)
   std::stringstream ss;
   ss << std::hex << input;

   // Read the numerical value back out into an int
   int x = 0;
   ss >> x;

   // Add 3 and display result in hex
   x += 3;
   std::cout << std::showbase << std::hex << x; // will output: 0x1003

   // Add another 10 and display result in hex
   x += 10;
   std::cout << std::showbase << std::hex << x; // will output: 0x100d
}

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    听起来您正在获取一个十六进制字符串,并且需要将数值存储在一个变量中。然后,在将来的某个时候,您需要将变量转换回字符串。

    您不必担心基本数字类型(int、long、float)使用的内部表示。虽然计算机本身会以二进制形式存储值,但编程语言的设计目的是让您(在某种程度上)隐藏这一事实,因此您不必担心。

    既然我们已经让语言将内部存储抽象为“数字”,我们所需要的只是一种读取和写入该数字的方法。所有语言都具有可以让您以不同格式读取/写入数据的功能,并且您始终可以自己滚动(尽管除非您只是在学习,否则不建议这样做),因此我使用的是 C。

    C 提供 scanf()printf() - 还有其他功能也可以完成这项工作,但这些都是您可以使用的不错示例。这些功能非常相似,所以很容易写一些代码:

    #include #define 格式“%X” // 将字符串输入转换为 n 个整数 // // 参数 // str 要转换的字符串 // x 指向返回值位置的指针 // // 返回 // 0 成功 // 失败时非零 int get_num_from_hex_string(char* str, int* x) { if(str == 0) 返回 EINVAL; // 我们假设在某处定义了 MAX_LEN... if(strlen(str) > MAX_LEN) 返回 EINVAL; int 结果 = scanf(格式,x); // 有一个更好的错误,但现在已经足够了 如果(结果!= 1)返回EIO; 返回0; } // 将整数转换为十六进制字符串 // // 参数 // x - 要转换的整数 // str - 预分配的输出缓冲区 // len - str 中剩余的空间量。一定是 // 至少 12 个字节。 // // 返回 // 0 成功 // 失败时非零 int get_hex_string(int x, char*str, int len) { if(str == 0) 返回 EINVAL; if(len

    【讨论】:

      【解决方案3】:

      抱歉提前出错,我做的很快,不确定这是解决方案,这只是一个想法

      #include <iostream>
      #include <string>
      
      using namespace std;
      
      class hexa
      {
      public:
          hexa(const char* x);
          hexa(int x=0);
      
          hexa& operator+(int x);
          operator int& ();
          operator string () const;
      private:
          int value_;
          friend istream& operator >>(istream &is, hexa& x);
          friend ostream& operator <<(ostream &os, const hexa& x);
      };
      
      
      int main()
      {
          hexa x(0x1009);
          cout << "x = " << x << endl;
      
          hexa y("6");
          cout << "y = " << y << endl;
      
          cout << "x + y = " << x+y << endl;
          return 0;
      }
      
      hexa::hexa(const char* x)
          : value_(stoi(string(x), 0, 16))
      {}
      
      hexa::hexa(int x)
          : value_(x)
      {}
      
      hexa& hexa::operator+(int x)
      {
          value_ += x;
          return *this;
      }
      
      hexa::operator int& ()
      {
          return value_;
      }
      
      hexa::operator string () const
      {
          return to_string(_Longlong(value_));
      }
      
      istream& operator >>(istream& is, hexa& x)
      {
          is >> hex >> x.value_;
          return is;
      }
      ostream& operator <<(ostream& os, const hexa& x)
      {
          os << hex << x.value_;
          return os;
      }
      

      【讨论】:

        【解决方案4】:

        假设您将字符串存储在一个变量中:

        std::string mystring;
        

        然后,为了对其进行计算,您可以使用自己定义的函数:

        void AddSomeNumber(std::string& mystring, int n)
        {
            // Convert the string to integer
            unsigned mynumber;
            sscanf(mystring.c_str(), "%x", &mynumber);
        
            // Add a number
            mynumber += n;
        
            // Convert the number to string
            char temp[9]; // pardon my style :-)
            sprintf(temp, "%x", mynumber);
            mystring = temp;
        }
        
        int main()
        {
            std::string mystring("1009");
            AddSomeNumber(mystring, 3);
            std::cout << mystring << '\n'; // will print 100c
        }
        

        【讨论】:

          【解决方案5】:

          我们只是一个普通的整数,当你需要显示它时,转换成十六进制格式。

          【讨论】:

          • 不不,字符串最初包含一个数字 1000,这个数字已经以十六进制格式表示,所以当我将它存储在一个变量中时,它必须是十六进制格式而不是十进制,你说什么它已经是十进制的,我需要将它转换为十六进制,不,它已经是十六进制
          • @Shadi Al Mahallawy - 你只是让自己的生活变得困难。首先将字符串转换为int,然后进行计算。 decimaldecimal 它是 value - 您可以稍后以任何您想要的格式显示它。
          • 我不认为你得到我或者我没有得到一些东西,字符串包含 1000,它是一个字符串,它需要转换为整数所以我使用 atoi() 并将其存储在变量 x ,, 知道 x 包含 1000,因为 x 是十进制表示,如果我执行以下计算 1000+3=1003 1003+3=1006 1006+3=1009 1009+3=1012 我需要的是数字将表示为十六进制不是十进制,所以当我执行这些计算时 1000+3=1003 1003+3=1006 1006+3=1009 1009+3=100C
          • @Shadi Al Mahallawy - 为什么不能将十六进制字符串转换为整数?以后计算会更容易。看到这个:codeproject.com/KB/string/hexstrtoint.aspx
          • @Shadi Al Mahallawy - 再次。整数是整数。计算机将以某种内部表示形式存储它。当您想要显示它 时,转换为您想要的任何表示。十进制 10 是二进制 1010 是十六进制 A。
          猜你喜欢
          • 2012-06-05
          • 2017-08-12
          • 2015-11-29
          • 2012-10-11
          • 2014-10-07
          • 2018-06-16
          • 2014-03-19
          相关资源
          最近更新 更多