在《十六进制转十进制 - C》文章中我们使用完成了16进制转10进制的工作,那么我们能否把10进制转为16进制呢?
工作原理:
把要转换的数,除以16,然后,再将商继续除以16,直到商小于16。将最后一个商加上所有余数倒序排列,就是16进制数。
比如整数为1566,
(1) 1566 ÷ 16 = 97 余数为14
(2) 97 ÷ 16 = 6 余数为1
最后一个商:6;
倒数第一个余数:1
倒数第二个余数:14,即E(A=10,B=11,C=12,D=13,E=14,F=15)
整数1566=0x61E
程序代码:
/* * Int2hex.c * * Created on: 2010-07-20 * Author: xiaobin */ #include <stdio.h> #include <stdlib.h> void int2hex(unsigned long input, char output[]); int main(int argc, char* argv[]) { char out[8]; int k; int input = 0; if (argc > 1) input = atol(argv[1]); int2hex(input, out); printf("%s%d%s", "Integer: ", input, " Hex: 0x"); for (k = 0; k < 8; k++) { char ch = out[k]; printf("%c", ch); } printf("\n"); return 0; } void int2hex(unsigned long input, char output[]) { int i = 7; int j; while (((input % 16) != 0) || (input > 15)) { char tempCh; switch (input % 16) { case 0: tempCh = '0'; break; case 1: tempCh = '1'; break; case 2: tempCh = '2'; break; case 3: tempCh = '3'; break; case 4: tempCh = '4'; break; case 5: tempCh = '5'; break; case 6: tempCh = '6'; break; case 7: tempCh = '7'; break; case 8: tempCh = '8'; break; case 9: tempCh = '9'; break; case 10: tempCh = 'A'; break; case 11: tempCh = 'B'; break; case 12: tempCh = 'C'; break; case 13: tempCh = 'D'; break; case 14: tempCh = 'E'; break; case 15: tempCh = 'F'; break; } output[i] = tempCh; input = input / 16; i--; } for (j = i; j > -1; j--) output[j] = '0'; }
作者:xiaobin_HLJ80 发表于2013-12-22 2:15:08 原文链接
阅读:64 评论:0 查看评论