07.从密码学看进制转化

版权声明:本文为博主 乔小白- 一字一句敲出来的原创作品,未经博主允许不得转载,多谢支持。
本系列博客仅做经验交流分享,不能用作任何商业用途。本文中如有不足之处,请留言,本人将及时更改。

进制转化到密码学

1.什么是进制?

  • 在数据的记录中,数据分为很多种进制,本帖我们介绍数据存储的进制问题。
  • 我们在正常的数学运算中,采用的是十进制(逢十进一),但是在计算机的数据中,有很多进制;下面列举几个进制:二进制,八进制,十六进制。

1.二进制:
请参考链接二进制

2.八进制:
请参考链接八进制

3.十进制:
请参考链接十进制

4.十六进制:
请参考链接十六进制

2.如何转化进制

  • 简述一下,进制问题就是逢几进一的问题。
  • 当我们需要转化进制的时候,最好的方法就是将数据转化成二进制,然后再根据规律转化成想要的数据。

1.二进制表示方式:

在完成进制转化之前,必须要知道的一件事情:2的0~10次方是什么!

下面列举了2的0次方到2的10次方值:

所用函数介绍:

 /*
 * 函数名:pow()
 * 参数:底数x, 指数y
 * 返回值:运算结果
 * 作用:计算x的y次方
 * 位置:在头文件math.h中
 */
 
 double pow(double x, double y);

实现代码如下:

#include<math.h>
#include<stdio.h>
int main(void)
{
	for (int i = 0; i < 11; i++)
	{
		printf("%lf\n", pow(2, i));
	}
	system("pause");

}

代码运行结果如下:
2的几次方
2.下面我们来看一下各种进制的表示方法:

  • 二进制
    二进制

以1和0组成,可以代表开关量。0代表关,1代表开。

  • 八进制

八进制

C语言中以0开头的数。

  • 十进制
    十进制

    正常我们的数据记录方式。

  • 十六进制
    十六进制

以0x(或者0X)开始的数据,大小写都可以。

  • 在C语言中,每种进制都有自己独特的表示方式。
  • 在C语言中,八进制的0,如果不加特别的修饰,很容易被编译器忽略。

下面介绍一下,C程序中八进制和十六进制的表示方法
所用函数介绍:

 /*
 * 函数名:putchar
* 参数:字符c
* 返回值:无
* 作用:输出一个字符
* 位置:在头文件stdio.h中
*/
char putchar(char c);  //注意对于字符,使用的是单引号,字符串是双引号
 

预览程序:

/*
* 函数名:putAB
* 参数:无
* 返回值:无
* 作用:输出AB两个字符
*/
void putAB(void)
{
/*  
*八进制使用的是 \ 
* 十六进制使用的是  \x
*/
	putchar('\101'); //八进制 
	putchar('\x42'); //十六进制 
	getchar();

	//'0' 48
	//'A' 65
	//'a' 97
}

所用函数介绍:

 /*
 * 函数名:_itoa
* 参数:数值Value ,字符串地址buffer ,转化的进制类型Radix
* 返回值:无
* 作用:输出一个字符
* 位置:在头文件stdio.h中
*/

char*  _itoa(int Value, char* buffer , int Radix);

下面主要讲解一下如实使用C代码实现进制转化
注意:手动转化请依靠课堂教学为准
代码展示:

/*
*Copyright (c) 2019.池州市集成电路可靠性分析与嵌入式研究实验室
*All rights reserved.
*摘要:使用函数,将数据的进制改变,并熟悉二进制,八进制,十六进制。
*文件名称:数据交换.c
*文件标识:无
*
*当前版本:v1.0
*作者:乔勇刚
*完成日期:2019/09/08
*
*/

#define _CRT_SECURE_NO_WARNINGS

#include<stdio.h>
#include <stdlib.h>
int main(void)
{
	int num = 0;
	scanf("%d",&num);
	printf("num=%i\n", num);
	
	char str[32] = "0";
	_itoa(num, str, 2);
	printf("\n%s\n", str);


	_itoa(num, str, 8);
	printf("\n%s\n", str);

	_itoa(num, str, 10);
	printf("\n%s\n", str);

	_itoa(num, str, 16);
	printf("\n%s\n", str);


	/*如果是getchar()必须要是两个才有效,回车也是字符*/
	//getchar();
	//getchar();

	system("pause");
}

/*   
*  cmd中 < 相当于输入, > 相当于输出
*  进制转化.c < 1.txt >2.txt
*/

补充知识点ASCII码是一种字符与数字见相互转化的特殊表示(点击可查看该知识点)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值