有时候想把一个很大的数尽量用更少的空间存储起来,那么就可以采用很大的进制来存储它,比如说,一个大于等于10小于等于16数字使用10进制就需要两位,使用16进制就只需要1位,那就等于帮程序省了一位的空间,数字越大,进制越高,效果也就越明显。

举例如下:

1000000的转换比较 二进制 八进制 十进制 十六进制
转换结果
11110100001001000000
3641100
1000000
f4240
占用存储长度
20
7
7
5

现在我们可以看到,十六进制能省下2个长度,然后我们能不能得到一个更高进制?那就能省更多空间了,且看代码

<?php
// need bcmath extension
function binaryTo(int $num = 0) {
$dict = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ,./?<>{}[]|()';
$to = strlen($dict);
$ret = '';
do {
$ret = $dict[bcmod($num, $to)] . $ret; //bcmod取得高精确度数字的余数。
$num = bcdiv($num, $to); //bcdiv将二个高精确度数字相除。
} while ($num > 0);
return $ret;
} function binaryFrom(string $num = '') {
$num = strval($num);
$dict = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ,./?<>{}[]|()';
$from = strlen($dict);
$len = strlen($num);
$dec = 0;
for($i = 0; $i < $len; $i++) {
$pos = strpos($dict, $num[$i]);
$dec = bcadd(bcmul(bcpow($from, $len - $i - 1), $pos), $dec);
}
return $dec;
} var_dump(binaryTo(1000000));
var_dump(binaryFrom('2rWp'));

这个代码可能会报错,如果报错请检查是不是没开启 bcmath 扩展,没有这个扩展的你就装一下,sudo apt search 然后install 一下

此时我们就可以把这个表格更新了,我们看到现在使用这个函数得到的进制结果是 2rWp 那么长度就是4位。

表格更新如下:

1000000的转换比较 二进制 八进制 十进制 十六进制 七十五进制
转换结果 11110100001001000000 3641100 1000000 f4240
2rWp
占用存储长度 20 7 7 5 4

我们可能觉得7个长度缩减到4个长度,这并不算什么,但是如果你有一个很大数据量的存储文本,你存储了大量的这种id int型的数据,那么就会占用很大的空间,此时你采用这种方式转换存储一下,发现文件能减少30%左右,那这个时候该文件的读写就能快很多,能减少服务器各方面(硬盘空间 内存空间等)压力,数据量越多,其效果就越明显。

当然这里面有副作用,比如我添加的数据需要转换一次回到10进制,才能给前台使用,查询的时候也要先转为75进制进行查询,特殊格式如果用到了]})这种的时候可能会影响你的业务逻辑,那你需要根据自身业务情况处理一下,或者换其他的符号作为进制符号。

php 超过64位进制和10进制的转换的更多相关文章

  1. PHP进制转换[实现2、8、16、36、64进制至10进制相互转换]

    自己写了一个PHP进制转换程序,一个类吧,第一次写这个东东,写这个东东,在处理文本文件时能用得到.   可以实现: 10进制转换2.8.16.36.62进制2.8.16.36.62进制转换10进制 有 ...

  2. SQLSERVER 16进制与10进制转换

    最近工控项目中遇到的16进制与10进制转换,在.NET中比较容易实现,在SQLSERVER中发现没有直接的转换,尤其是出现超出范围的long负数,即无符号64位整数在sqlserver中的存储.网上找 ...

  3. golang中字符串、数值、2进制、8进制、16进制、10进制、日期和字符串之间的转换

    package main import ( "fmt" "reflect" "strconv" "time" ) fun ...

  4. delphi 中字符串与16进制、10进制转换函数

      //字符串转成16进制代码function strToHexStr(str:string):string;varc:char;ss:string;i:integer;beginwhile str& ...

  5. HDU 4278 Faulty Odometer 8进制转10进制

    Faulty Odometer Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?p ...

  6. php 36进制与10进制转换

    php 36进制与10进制转换 /** * @desc im:十进制数转换成三十六机制数 * @param (int)$num 十进制数 * return 返回:三十六进制数 */ function ...

  7. 16进制转10进制 HDU-1720

    A+B Coming Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  8. SQLSERVER 16进制转10进制

    原码.补码.反码参考: http://www.cnblogs.com/zhangziqiu/archive/2011/03/30/ComputerCode.html 进制转换参考: http://ww ...

  9. python中2进制、10进制、16进制等之间的转换

    10转2: bin(8) # '0b1000' 2转10: int( 10转16: hex(15) # '0xf' 16转10: int( 2进制和16进制中间通过转10进制可以相互转换 from b ...

  10. Java-二进制转10进制原理机制

    任何文件在计算机储存时都是以二进制储存的,由 1和0 组成,如: 101010101010100111110100101010 现在有一组二进制数据: 10010110 那么他转成10进制是多少呢(我 ...

随机推荐

  1. Elementui 给输入框加上单位

    效果图: 具体代码: <el-input class="el-col-12" v-model="value.projectLevel" :disabled ...

  2. C 语言头文件作用的简单理解

    C 语言是一种先声明后使用的语言. 举个例子: 如果你要在 main() 函数里调用一个你的函数 foo(),那么你有两种写法: 将 foo() 的定义写在 main() 之前.此时 foo() 的声 ...

  3. Session的运行机制

    浏览器通过web访问服务器,服务器的web服务开启后,第一步就是开启session,这也是session的第一阶段: session_start() 这个函数的作用:开启session,然后根据以前设 ...

  4. electron修改vue项目打包后的exe图标

    vue用electron打包点击这里 安装electron-icon-builder 添加图标生成器:npm i electron-icon-builder 生成图标 1.在package.json的 ...

  5. EF Core – 继承 Inheritance

    前言 继承是面向对象里的概念. 关系数据库只有一对一, 一对多这类关系, 并没有 "继承" 关系的概念. 所以 ORM (Object–relational mapping) 就需 ...

  6. Filter——过滤器

    Filter       Filter 快速入门    Filter 执行流程           1.放行前,对 request 数据进行处理     2.放行后,对 response 数据进行处理 ...

  7. Windows系统环境变量

    添加环境变量: 添加系统变量,机器要重新启动 添加用户变量,机器不用重启: 一般添加环境变量都添加在用户变量中,但只针对这一用户生效 为了使的所有用户都能正常使用软件,通常添加系统变量

  8. /proc/vmalloc

    root@pita2_mr813_tina35:/# cat /proc/vmallocinfo 0xffffff80007d0000-0xffffff8000902000 1253376 load_ ...

  9. .Net 使用JWT验证接口

    // jwt 的生成和接口的验证 // 需要使用的包 // 1. System.IdentityModel.Tokens.Jwt 生成 Token的 // 2. Microsoft.AspNetCor ...

  10. yarn : 无法加载文件 C:\Users\zhulo\AppData\Roaming\npm\yarn.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.microsoft.com/fwlink/?Li nkID=135170 中的 about_Execution_Policies。 所在位置 行:1 字符: 1 + yarn serve

    powershell的执行策略问题: 解决办法: 管理员身份打开powershell 输入  set-ExecutionPolicy RemoteSigned  然后选择 a or  Y :