簡體   English   中英

如何將int數組中定義的整數轉換為十六進制?

[英]how do I convert an integer which is defined in an int array to hex?

我有一個int數組,代表一個非常大的數字,如:

// ...
unsigned int n1[200];
// ...

n1 = {1,3,4,6,1,...} ==> means my number is 13461...

如何將該大數字轉換為十六進制值?

所以這是我對這個問題的看法:

  1. 你有一個數字數組。
  2. 您希望從此數組數組構建unsigned int。
  3. 數字數組可以是十六進制數字,也可以是十進制數字。

要構建這個無符號長long,假設有一個DECIMAL數字數組:

unsigned long long myNum = 0;
unsigned int n1[200];

for (int i=0; i < n1.length ; i++ ){
    myNum += pow(10,i) * n1[n1.length - i];
}

要構建這個無符號長long,假設一個十六進制數字數組:

for (int i=0; i < n1.length ; i++ ){
    myNum += pow(16,i)* n1[n1.length - i];
}

(注意基數16)

免責聲明:限制在陣列中存儲的16位MAX。 之后,您將超出緩沖區

如果只是以正確的格式顯示數字......

好吧,int是一個int是一個int ...(在內存中)。

我的手上有10個手指,無論我是否撥打該號碼10或A.

如果要格式化十六進制的DISPLAY數字,請嘗試以下操作:

unsigned int i = 10;
//OR
unsigned int i = 0xA;

printf("My number in hex: %x", i);
printf("My number in decimal: %d", i);

我不確定你是否希望將十六進制表示為字符串。 如果是這樣的話,這里有一些代碼:

#include <iostream>
#include <stack>
using namespace std;

string toHexa(int num){
    string digit = "0123456789ABCDEF", numStr = "";
    stack<char> s;

    do {
        s.push(digit[num%16]);
        num /= 16;
    } while (num != 0);

    while (!s.empty()){
        numStr += s.top();
        s.pop();
    }
    return numStr;
}

int main(){
    int num = 235; // EB in hexa
    cout << num << " to hexadecimal: " << toHexa(num) << endl;
    return 0;
}

您可以使用GMP庫使這一點相對簡單。

\n
  • 使用basic_stringstream<unsigned int>來包裝數組。
  • 使用operator <<將其讀入mpz_t變量。
  • 為您的結果創建另一個basic_stringstream<unsigned int>
  • 使用std::hexoperator >>std::hex形式寫回變量。

這將適用於ASCII數字,但你的不是。 您仍然可以使用GMP,但您需要使用mpn_get_strmpn_set_str函數。 您需要將您的數字復制到unsigned char[] ,然后您可以指定轉換為mp_limb_t並返回到一串數字。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM