如何将int数组中定义的整数转换为十六进制?

时间:2011-03-29 23:09:45

标签: c++

我有一个int数组,代表一个非常大的数字,例如:

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

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

如何将该大数字转换为十六进制值?

3 个答案:

答案 0 :(得分:1)

所以这是我对这个问题的看法:

  1. 你有一个数字数组。
  2. 您希望从此数组数组构建unsigned int。
  3. 数字数组可以是十六进制数字,也可以是十进制数字。
  4. 构建这个无符号长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);
    

答案 1 :(得分:0)

我不确定您是否希望将十六进制表示为字符串。如果那样的话 在这种情况下,这里有一些代码:

#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;
}

答案 2 :(得分:0)

您可以使用GMP library使这一点相对简单。

<击>

<击>
    <击>
  • 使用basic_stringstream<unsigned int>打包您的数组。
  • 使用operator <<将其读入mpz_t变量。
  • 为您的结果创建另一个basic_stringstream<unsigned int>
  • 使用std::hexoperator >>以十六进制的形式写回变量。

这适用于ASCII数字,但不是。您仍然可以使用GMP,但您需要使用mpn_get_strmpn_set_str功能。您需要将数字复制到unsigned char[],然后您可以指定转换为mp_limb_t的基础并返回一串数字。