十六进制怎么转十进制啊?
发布网友
发布时间:2022-04-22 00:34
我来回答
共1个回答
热心网友
时间:2023-06-21 21:27
十六进制转十进制:
从个位起第i位乘以16的i-1次方
比如
0x233 = 2*16^2 + 3*16^1 + 3*16^0 = 512 + 48 + 3 = 563
0x666 = 6*16^2 + 6*16^1 + 6*16^0 = 1536 + 96 + 6 = 1638
0x7FFF = 7*16^3+15*16^2+15*16^1+15*16^0=28672+3840+240+15=32767
十进制转十六进制:
除十六取余数
比如
233 ÷ 16 = 14 ......9
14 ÷ 16 = 0 ......14
倒着写就是0xE9
32768 ÷ 16 = 2048 ......0
2048 ÷ 16 = 128......0
128 ÷ 16 = 8......0
8 ÷ 16 = 0......8
倒着写就是0x8000
算法实现:
十六进制转十进制:
#include<stdio.h>
#include<string.h>
char buf[20];
int len,_pow,ans=0;
int trans(char hex)
{
if (hex>='0'&&hex<='9') return hex-48;
if (hex>='a'&&hex<='f') return hex-87;
if (hex>='A'&&hex<='F') return hex-55;
return 0;
}
int main(){
scanf("%s",buf);
len = strlen(buf);
_pow = 1;
for (int i=len-1;i>=0;i--)
{
ans = ans + trans(buf[i]) * _pow;
_pow = _pow << 4;
}
printf("%d\n",ans);
return 0;
}
十进制转十六进制:
#include<stdio.h>
char trans(int deci)
{
if (deci<10) return deci+48;
return deci+55;
}
int n,len=0;
char hex[20];
int main(){
scanf("%d",&n);
while(n)
{
hex[len++] = trans(n&15);
n=n>>4;
}
for (int i=len-1;i>=0;i--)
putchar(hex[i]);//跟手算一样,要倒着输出
return 0;
}