我正在制作一个将十进制转换为十六进制的 C 程序。我的程序似乎适用于较小的数字,例如314156
存储在 long int 但较大的数字,例如11806310474565
or 8526495043095935640
always return back 0x7FFFFFFF
。如何处理或存储大于2147483647
/的数字2^32
。我尝试过使用long long
and unsigned long long
,但是这些在我的代码中不能正常工作。
代码:
#include <stdio.h>
#include <stdlib.h>
int main( int argc, char* argv[] ){
if(argc != 2 ){
printf("Usage: %s requires one parameter\n", argv [0]);
return 1;
}
unsigned long long decimal = atoi(argv[1]);
int count = 0, count2 = 0, value = decimal;
char hex[100];
for( ; value!=0 ; value/=10 )
count++;
unsigned long long q = decimal;
int i = 0, r = 0;
while( q != 0){
q = decimal/16;
r = decimal%16;
printf("%*llu = %*llu * 16 + %*d (%X)\n", count, decimal, count, q, 3, r, r);
hex[i++] = r<10 ? r+48 : r+55;
decimal = q;
}
printf("0x");
for(i-- ; i>=0; i--){
printf("%c",hex[i]);
}
printf("\n");
return 0;
}
我正在gcc
用作编译器。