一、十进制转任意进制:

十进制转任意进制时,将这个十进制数除以进制数,比如2(也就是十进制转二进制),得到商和一个从0~1的余数,然后再以这个商为被除数,除了进制数2,继续得到商和一个从0~1的余数。以此方式不断相除,直到得到的商为0为止。此时,得到若干个余数,把这些余数按从后到先的顺序排列起来,那么这个排列起来的值即为该十进制转换成二进制的值。计算如图所示:

最后得到的余数为二进制的非零的最高位,最先得到的余数为二进制的最低位,可知:十进制数9转换成二进制数为1001。

二、任意进制转十进制:

任意进制转十进制时,以二进制数1001为例:该进制的最低位(右一)的值1就表示实际的十进制值1,次低位(右二)的值0表示进制数2的一次方的0倍即为0,次次低位(右三)的值0表示进制数2的二次方4的0倍即为0,最高位(左一)的值1表示进制数2的三次方8的1倍即为8,以此类推,将每位得到的十进制数相加得到9,该和即为二进制数1001对应的十进制数。计算如图所示:

三、代码示例:

以PHP代码为例,实现十进制与三十六进制的互相转换:

1、定义码表,指定十进制和三十六进制的对应码:

//十进制与三十六进制对应的码表
$dic  = array(0  => '0',1  => '1',2  => '2',3  => '3',4  => '4',5  => '5',6  => '6',7  => '7',8  => '8',9  => '9',10 => 'A',11 => 'B',12 => 'C',13 => 'D',14 => 'E',15 => 'F',16 => 'G',17 => 'H',18 => 'I',19 => 'J',20 => 'K',21 => 'L',22 => 'M',23 => 'N',24 => 'O',25 => 'P',26 => 'Q',27 => 'R',28 => 'S',29 => 'T',30 => 'U',31 => 'V',32 => 'W',33 => 'X',34 => 'Y',35 => 'Z',
);
//基数为36
$base = count($dic);

2、定义方法,十进制转三十六进制:

/*** 十进制转指定位数的N进制* @param  int $number 要转的十进制数* @param  int $len    转N进制的位数,不足位数高位补0* @return bool|string*/
function encode($number, $len) {//计算指定位数编码所能表示的最大十进制数$max     = bcpow($GLOBALS['base'], $len) - 1;$options = array('options' => array('min_range' => 0,'max_range' => $max,),);if (false === filter_var($number, FILTER_VALIDATE_INT, $options)) {echo '数值已超过指定位数所能表示的数值范围';return false;} else {//转化为N进制$codes = array();$loop  = true;while ($loop) {$num     = bcmod($number, $GLOBALS['base']);$codes[] = $GLOBALS['dic'][$num];$number  = bcdiv($number, $GLOBALS['base'], 0);if ($number == '0') {$loop = false;}}//根据指定的长度在取模结果的右侧补0$codes = array_pad($codes, $len, '0');$codes = array_reverse($codes);$code  = implode('', $codes);return $code;}
}

3、定义方法,三十六进制转十进制:

/*** N进制转十进制* @param  string $code* @return bool|int|string*/
function decode($code) {$dic = array_flip($GLOBALS['dic']);//去掉左边的0$code = ltrim($code, '0');//字符串转数组$codes = str_split($code);foreach ($codes as $char) {if (!array_key_exists($char, $dic)) {echo '编码中包含非法字符';return false;}}$number = 0;$len    = strlen($code);if ($len > 0) {//反转编码,用于转化为10进制$code = strrev($code);for ($i = 0; $i < $len; $i++) {$a      = bcpow($GLOBALS['base'], $i);$b      = $dic[$code[$i]];$num    = bcmul($a, $b);$number = bcadd($number, $num);}}return $number;
}

将码表的对应值无规则打乱,只要码表不被泄露就可以用来作为一种加密方式。

十进制的转换与任意进制的互转相关推荐

  1. 使用递归将十进制转换成任意进制(Number Conversion)

    关于递归 什么是递归? 说白了,就是函数自己调用自己,然后被调用的函数继续调用自己,这将无限循环下去,除非代码中有终止调用链的的内容. 解释一下递归的所经历的过程 递归需要有边界条件.递归前进段和递归 ...

  2. 任意进制转换java_Java 任意进制转换(两种方式)

    本文提供两种Java实现任意进制转换的方法: 方法一:利用 Integer 实现进制转换 1. Integer类的方法toBinaryString(),Integer.toOctalString(), ...

  3. 数据结构---递归实现十进制装换为任意进制

    数据结构-递归实现十进制装换为任意进制 代码: #include <stdio.h> #include <stdlib.h> #include"stack.h&quo ...

  4. 利用栈的基本操作,将一个十进制数转换成8进制数

    题目 利用栈的基本操作,将一个十进制数转换成8进制数 #include<iostream>using namespace std;#define MAXSIZE 100 typedef i ...

  5. 计算机进制的转换(任意进制)详解

    进制的转换总是觉得很乱,不知道怎么去系统的去记住,今天我就用最简单的方法,将计算机进制的转换讲解明白. 一.任意进制转十进制 任意进制转十进制,我们采用的是按权展开法 任意进制转十进制,只需要修改底数 ...

  6. 十进制数转化为任意进制数n,采用变量N、数组A[]进行存储两种算法实例

    进制转化的核心代码为:(a 为输入的十进制数,n为需要转换的进制数,temp为变量进行存值) //先假设将a全部囤在个位数上,依次将a处理进行升位处理 temp = a %n; //利用求余公式,求出 ...

  7. 十进制数转换成N进制数

    将一个十进制整数转换为N进制的方法有 除N取余法 所谓除N取余法,就是将一个是进制数除以N,得到一个商和一个余数,并记下这个余数r0. 然后将商作为被除数除以N,得到一个商和一个余数,并记下这个余数r ...

  8. jsp网页实现任意进制的数转换成任意进制数

    效果图: 源代码: <%@ page language="java" contentType="text/html; charset=utf-8" pag ...

  9. linux shell 十进制转十六进制_问1得10:shell十进制转换到任意进制,多大事儿,一行搞定!

    我是@程序员小助手Rman,仅次于Xman,Ironman,Superman. 引言 Bash编程中,我们一般不需要把字符串格式化为十六进制.因为,十进制是给人类看的,而16进制则用于存储到计算机. ...

最新文章

  1. 基于点线特征避免单目视觉SLAM的退化
  2. Flex4与WebService通信
  3. uniapp 页面渲染完成
  4. 获取Android手机的分辨率通过ADB命令
  5. mysql error 1045 的解决方法
  6. Python数据类型-----列表
  7. 22 SD配置-主数据-定义付款条款
  8. AOP Error creating bean with name ‘myCaculator‘ defined in file [XXX]
  9. 浅谈线性判别分析LDA
  10. 强化学习读书笔记 - 03 - 有限马尔科夫决策过程
  11. matlab所有颜色,MATLAB 颜色选择及应用
  12. SSM项目使用ConfigTools对数据库的密码进行加密
  13. python打印上下标
  14. python描述数据维度的含义_NumPy中的维度(dimension)、轴(axis)、秩(rank)的含义
  15. 基础-07-八大疑问词
  16. 【直流潮流】基于直流潮流的电力系统停电分布及自组织临界性分析
  17. 如何统计钣金文档中向上和向下折弯的个数
  18. PHP中preg_match函数详解
  19. 未来计算机网络会发展成什么样子,计算机网络技术未来的发展与应用
  20. Teradata 记事本

热门文章

  1. python找出10000以内的质数_python求10000以内的质数_10000以内的质数
  2. 评论一下《PPT演义》
  3. 简单3dsmax城堡
  4. 大家快点帮我,帮我,bt3使用时出了点问题
  5. kubeadm Networking.PodSubnet
  6. 基于Java毕业设计影楼网站源码+系统+mysql+lw文档+部署软件
  7. 苹果电脑有什么专业的录音软件
  8. Matlab-RGB-颜色对照表(0-1之间取值)
  9. linux上sendmail配置文件,linux系统SendMail详细配置
  10. 循环经济的三大发展趋势