C语言中的进制

一、表示

dec: 十进制 decimalism

bin:二进制 binary

oct:八进制 octal

hex:十六进制 hexadecimal

二、C语言中的表示

在C语言里,整数只有三种表示形式:十进制,八进制,十六进制。

​ 以数字0开头,由0~7组成的数是八进制。 ​

以0X或0x开头,由0~9,A~F或a~f (大小写都可以)组成是十六进制。 ​

除表示正负的符号外,以1~9开头,由0~9组成是十进制,且没有前缀

进制准换问题

一、直接用printf函数中的输出控制符来转换进制

例如:输入整数020 (为八进制),该方法输入为:16,20,10

int x=020;
printf("%d,%o,%x\n",x,x,x);

若要显示其前缀则加入说明符:%#o,%#x (o,x不区分大小写)

int x=20;
printf("%d,%#o,%#x\n",x,x,x);

该方法输出为:20,024,0x14

二、利用算法实现进制转化

  • 十进制转换为任意进制

#include<stdio.h>
void main()
{	int x,p; //x为十进制数,p为目标进制大小 
	scanf("%d",&x);
	scanf("%d",&p);
	int a[100]; //存放余数 
	int count=0;
	do{
	  	a[count++]=x%p;
		x=x/p;
	}//当商不为0时进行循环 
	while(x!=0);
	for(int i=count-1;i>=0;i--){
		printf("%d",a[i]);
	}

}
  • 任意进制转换为十进制
#include<stdio.h>
void main()
{   
	int num,dec,p,q;//num为输入的进制数,dec为十进制
	scanf("%d",&num);
	scanf("%d",&p);
	q = 1;
	dec = 0;
	do{
		dec = dec+(num%10)*q;
		num /= 10;
		q = q*p;
	}while(num!=0);

	printf("%d\n",dec);

}
  • 二进制转换为十六进制
#include <stdio.h>
#include <math.h>
int main(){
	//输入2进制数 
	int x;
	scanf("%d",&x); 
	
	//确定:16进制数组大小size与2进制数组大小size*4.
	int X=x;
	int size=0; 
	while(true){
		if(X%10000!=0){ //采取看4位二进制的方法 
			size++;
			X=X/10000;
		}else{
			break;
		} 
	}
	char tt[size];   //16进制数数组 
	int t[size*4]; //2进制数数组 
      //存入 
	int sum=0;
	int count=0;
	for(int i=0;i<sizeof(t)/sizeof(int);i++){
		t[i]=x%10;
		x=x/10;
		sum=sum+t[i]*pow(2,count);
		count++;
		if(count%4==0){
			if(sum>=10){
				tt[--size]=65+(sum-10);  //字符'A'的ascii码为65 
			}else{
				tt[--size]='0'+sum;    
			}
			count=0;
			sum=0;
		}	
	}
	for(int i=0;i<sizeof(tt);i++){
		printf("%c",tt[i]);
	}
	return 0;
} 

 

  • 13
    点赞
  • 83
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在 C 语言,可以使用以下方法将 16 进制数转换为文: 1. 先将 16 进制数转换为 10 进制数。可以使用 C 语言的函数 `strtol` 将 16 进制数转换为 10 进制数。 例如: ``` #include <stdio.h> #include <stdlib.h> int main() { char *hex_str = "0x1234"; long decimal = strtol(hex_str, NULL, 16); printf("%ld\n", decimal); // 输出 4660 return 0; } ``` 2. 将 10 进制数转换为文。可以使用 C 语言的函数 `sprintf` 将 10 进制数转换为字符串,然后使用 UTF-8 编码将字符串转换为文。 例如: ``` #include <stdio.h> #include <stdlib.h> int main() { long decimal = 4660; char chinese[100]; sprintf(chinese, "%ld", decimal); printf("%s\n", chinese); // 输出 "4660" return 0; } ``` 希望这些信息能帮到您! ### 回答2: 在C语言,可以通过字符数组来实现将16进制数转换为对应的文字符。 首先,需要将16进制数以字符串的形式保存在字符数组,然后通过循环遍历数组,将每个16进制数转换为对应的文字符。 具体步骤如下: 1. 定义一个字符数组来保存16进制数,例如 char hex[] = "4E2D56DE"; 2. 创建一个新的字符数组来保存转换后的文字符,长度为字符串长度的一半,即 int len = strlen(hex)/2; char chinese[len]; 3. 使用for循环遍历字符数组,每次迭代处理两个字符,将其转换为对应的文字符; 4. 在循环体内部,使用 sscanf 函数将两个字符转换为整数,例如 int decimal; sscanf(&hex[i], "%2x", &decimal); 5. 将得到的整数强制转换为字符,即 char ch = (char)decimal; 6. 将该字符保存在新的字符数组,例如 chinese[i/2] = ch; 7. 最后,在循环结束后,输出转换后的文字符数组,即 printf("%s", chinese)。 以上步骤可以完成将16进制数转换为文字符的操作。注意,如果16进制数包含多个字符,则需要调整相应的循环条件和逻辑。 ### 回答3: 在C语言,将16进制转换为文的最简单方法是使用Unicode编码。Unicode是一种全球通用的字符编码标准,其包含了世界上几乎所有的符号和字符。 要将16进制数转换为文字符,首先需要确定该16进制数对应的Unicode编码。然后,可以使用C语言的字符数据类型(例如char)来存储并打印出该Unicode编码对应的字符。 例如,假设我们有一个16进制数0x4E2D,代表文字符“”。为了将其转换为文字符,我们可以先将该16进制数赋值给一个整型变量,如: ```c int hex = 0x4E2D; ``` 然后,可以使用char数据类型将其转换为字符,并打印出来,如: ```c char ch = hex; printf("%c\n", ch); ``` 运行上述代码,就会输出文字符“”。 需要注意的是,16进制转换为文字符只适用于Unicode编码范围内的字符。如果16进制数对应的Unicode编码不在Unicode标准定义的范围内,那么转换结果可能会是其他字符或乱码。 此外,如果要将多个16进制数转换为一个文字符串,可以将它们放在一个数组,然后通过循环遍历每个元素并转换为字符,最后使用printf函数打印整个字符串。 总结起来,要在C语言将16进制转换为文,可以使用Unicode编码来实现,通过将16进制数赋值给整型变量,然后转换为字符来完成。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值