二进制,十进制,十六进制之间转化的思路

加密算法经常需要进制之间相互转化。进制转化最好和二进制转化,这样出错率低一些。对进制之间转化有点迷糊,记下自己的理解。实在是不会转化的时候就转化成二进制然后再转化。

基本姿势一:十六进制(简写为hex或下标16)在数学中是一种逢16进1的进位制。一般用数字0到9和字母A到F(或a~f)表示,其中:A~F表示10~15,这些称作十六进制数字。

基本姿势二:从小数点开始,向左右二边按“四位一段”分段(不足补0),然后,每一段的四位二进制数就对应一位十六进制数。(中间环节省略二进制转十进制,十进制转十六进制)。

0000 —— 0
0001 —— 1
0010 —— 2
0011 —— 3
0100 —— 4
0101 —— 5
0110 —— 6
0111 —— 7
1000 —— 8
1001 —— 9
1010 —— A
1011 —— B
1100 —— C
1101 —— D
1110 —— E
1111 —— F

二进制转十进制:eg:1001=9:;——1001=2^3+2^0=8+1=9

十进制转十六进制:eg:30=1E;——30/16,商1余14,14对应的十六进制是E,所以数字30的的十六进制表示为:1E。

十六进制转是十进制:eg:1C=28;——1*16+12=28,C在十六进制中代表12。

二进制转十六进制:eg:11110=1E;——11110分解成0001 1110,0001是1,1110是E,所以是:1E。

在C语言中,我们可以使用基本的数学运和位操作来实现二进制十进制、十二进制十六进制之间转换。以下是简单的步骤: 1. **二进制十进制**: - 使用`for`循环,从右向左每位乘以2的幂次方,加起来得到十进制数。 2. **十进制二进制**: - 对于整数,可以使用`while`循环和` bitwise AND`操作,不断除以2并取余,直到商为0。 3. **十进制转十二进制/十六进制**: - 可以先转为二进制再转,因为计机内部就是用二进制表示的,然后用对应的基数(16或12)逐位计每一位的值。 4. **十二进制/十六进制十进制**: - 同样需要先将非基数数字(如A=10, B=11等)转换成对应的二进制,然后累加计。 5. **二进制/十六进制转**: - 十六进制可以直接通过ASCII码表或者预设的映射表进行转换二进制则先转为十进制再转十六进制。 下面是一个简单的示例函数,用于十进制转其他进制: ```c #include <stdio.h> #include <string.h> // 十进制二进制 void dec_to_bin(int decimal) { char binary[32]; int i = 0; while (decimal > 0) { binary[i++] = decimal % 2 + '0'; decimal /= 2; } binary[i] = '\0'; printf("Binary: %s\n", binary); } // 十进制十六进制 void dec_to_hex(int decimal) { char hex[10]; sprintf(hex, "%X", decimal); printf("Hexadecimal: %s\n", hex); } int main() { int num = 123; // 任意十进制数 dec_to_bin(num); // 转二进制 dec_to_hex(num); // 转十六进制 return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值