【发布时间】:2017-09-21 03:00:31
【问题描述】:
我正在制作一个将十进制转换为十六进制的 C 程序。我的程序似乎适用于较小的数字,例如存储在 long int 中的 314156,但较大的数字,例如 11806310474565 或 8526495043095935640 总是返回 0x7FFFFFFF。如何处理或存储大于2147483647 / 2^32 的数字。我尝试过使用long long 和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 作为编译器。
【问题讨论】:
-
使用
strtoull而不是atoi。
标签: c hex decimal unsigned-long-long-int long-long