有时候想把一个很大的数尽量用更少的空间存储起来,那么就可以采用很大的进制来存储它,比如说,一个大于等于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. VS Code 代码片段指南: 从基础到高级技巧

    前言 " 系列首发于公众号『非同质前端札记』 ,若不想错过更多精彩内容,请"星标"一下,敬请关注公众号最新消息. 今天咱们来聊聊 VS Code 里的自定义代码片段. 这 ...

  2. MarkDown语法教程(转)

    https://blog.csdn.net/2301_77569009/article/details/137957203

  3. Java多线程并发之同步容器和并发容器-第一篇

    Java多线程并发之同步容器和并发容器-第一篇 概述 本文主要讲解在Java多线程并发开发中,集合中有哪些支持并发的的.什么是同步容器(集合),什么是并发容器(集合)?并发容器分类有哪些?每个分类都有 ...

  4. Spring —— 集合注入

    数组注入    List集合注入    set集合注入    Map集合注入    Properties集合注入   

  5. P1438 无聊的数列 题解

    背景 看到题解都是差分,竟然还有建两颗线段树和二阶差分的大佬. 我感到不理解,很不理解. 题目正解 本题正解很明显就是:线段树 是的,你没有看错,就只有线段树. 很显然我们直接按照线段树板题写就可以了 ...

  6. eBPF 概述:第 3 部分:软件开发生态

    1. 前言 在本系列的第 1 部分和第 2 部分中,我们对 eBPF 虚拟机进行了简洁的深入研究.阅读上述部分并不是理解第 3 部分的必修课,尽管很好地掌握了低级别的基础知识确实有助于更好地理解高级别 ...

  7. iOS中RunLoop和线程的关系

    RunLoop又叫运行循环,主要用来管理线程.一个线程对应一个RunLoop,一个RunLoop又有五种模式.只有主线程的RunLoop是默认开启的,所以程序在开启后,会一直运行,不会退出.其他线程的 ...

  8. .Net 反射和特性

    学习:.net 反射简单介绍 - WebEnh - 博客园 (cnblogs.com) 反射就是通过反射程序集从而获取相关信息 十月的韩流 使用了特性就必定会使用反射 var res = obj.Ge ...

  9. src 和 href 的区别?

    src:都是引用资源 src:指向外部资源的位置 , 当浏览器解析到此元素时,会暂停其它资源的下载和处理 , 直到将该资源加载 , 编译 , 执行完毕 ,相当于将资源嵌入到文档中当前元素的所在的位置: ...

  10. 06 导师不敢和你说的水论文隐藏技巧,顶刊、顶会、水刊的论文读哪个,如何做一个称职的学术裁缝.md

    博客配套视频链接: https://www.bilibili.com/video/BV11g41127Zn/?spm_id_from=333.788&vd_source=b1ce52b6eb3 ...