16进制与2进制转换

16位数代表

0123456789101112131415
0123456789ABCDEF

 

二进制与十六进制对应关系

十六进制0123456789ABCDEF
二进制0000000100100011010001010110011110001001101010111100110111101111

 

二进制转换十六进制方法:取四合一法(从二进制的小数点位分界点,向左(或向右)每四位取成一位)

Eg:1011 1001 1011 . 1001→B9B.9

注意十六进制表示法:用字母H后缀表示,比如BH表示16进制11;用字母OX前缀表示,比如OX23表示16进制23

注意:在向左或向右取四位时,取到最高或最低位,如果无法凑够四位,就可以在小数点最左边或左右边补0

Eg:

       

2进制101111.011
补位00101111.0110
对应16进制2F.6

 

如上表得出:2F.6

十六进制转换为二进制方法:一分四法(与二进制转十六进制相反)

Eg:

十六进制BF4.B5
二进制101111110100.10110101
最终显示101111110100.10110101

 

 

 

二进制数和十六进制数的相互转换 c6下完美运行通过 #include #include #include #include void convert(char *input, char *output) { int len1 = strlen(input); //输入二进制数位数 int pos = len1 / 4 + 1; //输出十六进制数的位数 if (len1 % 4 == 0) { pos = pos - 1; } int j = 0; while (len1>0) { char sum = 0; for (int i=0; i0; i++, len1--) //从最后起每4位算一次值 { sum = sum + (input[len1-1]-'0')*pow(2, i); } // 转换16进制数表示 sum = sum + '0'; if ('9'<sum && sum '9' + 6) { printf("您输入的不是正确的2进制数!\n"); exit(0); } //十六进制数放到output数组相应位置 output[--pos] = sum; } } int main() { int groupNum = 0; char total[1024] = {0}; scanf("%d", &groupNum); for (int i=1; i<=groupNum; i++) { char input[1024] = {0}; char output[256] = {0}; fflush(stdin); //记得清楚输入缓冲区,否则每次回车会影响 gets(input); convert(input, output); char format[32] = {0}; sprintf(format, "\nCase %d: ", i); strcat(total, format); strcat(total, output); } printf("%s\n", total); } 不分手de恋爱 10:52:05 /二进制数和十六进制数的相互转换 c6下完美运行通过 #include #include #include #include void convert(char *input, char *output) { int len1 = strlen(input); //输入二进制数位数 int pos = len1 / 4 + 1; //输出十六进制数的位数 if (len1 % 4 == 0) { pos = pos - 1; } int j = 0; while (len1>0) { char sum = 0; for (int i=0; i0; i++, len1--) //从最后起每4位算一次值 { sum = sum + (input[len1-1]-'0')*pow(2, i); } // 转换16进制数表示 sum = sum + '0'; if ('9'<sum && sum '9' + 6) { printf("您输入的不是正确的2进制数!\n"); exit(0); } //十六进制数放到output数组相应位置 output[--pos] = sum; } } int main() { int groupNum = 0; char total[1024] = {0}; scanf("%d", &groupNum); for (int i=1; i<=groupNum; i++) { char input[1024] = {0}; char output[256] = {0}; fflush(stdin); //记得清楚输入缓冲区,否则每次回车会影响 gets(input); convert(input, output); char format[32] = {0}; sprintf(format, "\nCase %d: ", i); strcat(total, format); strcat(total, output); } printf("%s\n", total); }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值