當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


C++ Hex String轉Signed Integer用法及代碼示例


本文討論在 C++ 中將十六進製字符串轉換為有符號整數。有5種方法在 C++ 中執行此操作:

  1. 使用stoi()函數。
  2. 使用stoul()函數。
  3. 使用sscanf()函數。
  4. 使用字符串流方法。
  5. 使用升壓:lexical_cast。

1.使用stoi函數

斯托伊 是一個函數string頭文件。該函數將字符串作為參數並返回轉換後的整數。函數語法如下:

用法:

int stoi (char *str, size_t* idx, int base);

這裏,

str: The input string that is to be converted
size: Pointer to the object whose value is set by the function
base: It specifies the radix to determine the value type of input string

由於要求是將十六進製字符串轉換為整數,因此基數為 16。

例子:

C++


// C++ program to implement
// stoi() function to convert
// hex string to signed integer
#include <iostream>
#include <string>
using namespace std;
// Driver code
int main()
{
  // The Hex string that is to 
  // be converted
  char *str = "4AF1";
   
  // Calling the function stoi 
  // Storing the return value in 
  // an unsigned integer
  signed number = stoi(str, 0, 16);
   
  // Displaying the unsigned integer 
  // equivalent to the hex 
  cout << "hex: " << str << 
          "\tinteger: " << number;
  return 0;
}
輸出
hex: 4AF1    integer: 19185

說明:首先包含相關的頭文件。然後定義一個包含十六進製 4AF1 作為值的字符串。該字符串(字符數組)與 0 和 16 作為參數一起傳遞給 stoi 函數。其中0為大小的默認值,16為十六進製轉換。函數的返回值存儲在有符號整數中。隨後將顯示該十六進製字符串及其等價的有符號整數。

2.使用soul函數

使用bits/stdc++.h 頭文件中的stoul 函數可以產生相同的效果。

用法:

unsigned long stoul (const string&  str, size_t* idx = 0, int base = 10);

這裏,

str: String object with the representation of an integral number.
idx: Pointer to an object of type size_t, whose value is set by the function to position of the next character in str after the numerical value. This parameter can also be a null pointer, in which case it is not used.
base: Numerical base (radix) determines the valid characters and their interpretation. If this is 0, the base used is determined by the format in the sequence.Notice that by default this argument is 10, not 0. 

例子:

C++


// C++ program to implement stoul() 
// function to convert hex string 
// to a signed integer
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
   
// Driver code
int main()
{
  // Hexadecimal string
  string str = "FF";
   
  // Converting the string to 
  // unsigned integer
  unsigned num = stoul(str, 0, 16);
  
  cout << str << "is equals to " << num;
  return 0;
}
輸出
FFis equals to 255

解釋:首先,字符串包含值 FF (255)。然後這個字符串作為參數傳遞給 stoul 函數,以及 0(表示空指針)和 16(表示十六進製轉換)。輸出存儲在無符號整數中。該變量顯示在最後。

3.使用sscanf函數

使用默認 C++ 發行版中的 sscanf 函數可以產生相同的效果。

用法:

int sscanf(const char *str, const char *format, ...)

這裏,

str: This is the C string that the function processes as its source to retrieve the data.
format: This is the C string that contains one or more of the following items: Whitespace character, Non-whitespace character and Format specifiers

例子:

C++


// C++ program to implement the 
// sscanf() function to convert 
// a hex string to a signed integer
#include <iostream>
using namespace std;
// Driver code
int main()
{
  // Hexadecimal String
  char char_string[] = "4F";
   
  // Initializing the unsigned 
  // int to 0 value
  unsigned result = 0;
   
  // Calling the function and storing 
  // the resultant value in the address 
  // of result variable
  sscanf(char_string, "%X", &result);
   
  cout << result;
  return 0;
}
輸出
79

說明: 字符串已初始化,包含值 4F (int = 79)。無符號 int 數據類型的另一個變量初始化為值 0。調用 sscanf 函數,並將字符串以及十六進製格式說明符 “%X” 和存儲結果值的整數作為參數傳遞。最後顯示有符號整數的值。

4.使用stringstream方法

stringstream 方法使用流對字符串對象進行變形,使其看起來像是從流中讀取數據。該庫主要用於解析存儲在字符串內的數據。

例子:

C++


#include <bits/stdc++.h>
using namespace std;
int main()
{
    unsigned x;
   
      // Hexadecimal String
    string str = "FF";
    // Used for segregation of characters
    istringstream iss(str);
    // Converting to integer and storing the result in x
    iss >> hex >> x;
    cout << x;
}

輸出:

255

解釋:

與前麵的示例類似,無符號整數變量和包含十六進製代碼的字符串存儲在單獨的變量中。然後該字符串作為參數傳遞給國際空間站函數。該函數將常規字符串轉換為流。然後將基字段格式設置為十六進製,導致十六進製字符串轉換為整數,並將結果存儲在變量中x。這是通過使用六角操縱器來完成的。最後顯示無符號值。

5. 使用升壓:lexical_cast

boost:lexical_cast 可以將十六進製字符串轉換為有符號整數。它在幕後使用 stringstream。

例子:

C++


#include "boost/lexical_cast.hpp"
#include <bits/stdc++.h>
using namespace std;
using boost::lexical_cast;
int main() {
  
  string s1 = "0xFF";
   
  unsigned int x = lexical_cast<unsigned int>(s1); 
  cout << x << endl;
   
}

輸出:

255

解釋:該函數的工作和結構與中使用的非常相似字符串流方法。這裏唯一的區別是0x必須添加到十六進製字符串之前,以使 lexical_cast 函數確認存在十六進製 String 。之後,該字符串作為參數傳遞給lexical_cast 函數,並存儲其結果。最後,顯示與十六進製代碼關聯的值。



相關用法


注:本文由純淨天空篩選整理自VasuDev4大神的英文原創作品 Convert Hex String to Signed Integer in C++。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。