我有一个int数组,代表一个非常大的数字,例如:
// ...
unsigned int n1[200];
// ...
n1 = {1,3,4,6,1,...} ==> means my number is 13461...
如何将该大数字转换为十六进制值?
答案 0 :(得分:1)
所以这是我对这个问题的看法:
构建这个无符号长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::hex
和operator >>
以十六进制的形式写回变量。
击> 这适用于ASCII数字,但不是。您仍然可以使用GMP,但您需要使用mpn_get_str
和mpn_set_str
功能。您需要将数字复制到unsigned char[]
,然后您可以指定转换为mp_limb_t
的基础并返回一串数字。