<?php
class suanfa_number{
// 十进制
private $number = 0;
// 二进制
private $binary_number = "00000000";
// 八进制
private $eight_number = "00000000";
// 16进制
private $hexadecimal_number = "00000000";
private $type = 10;
private $change_type = 2;
//返回值
public $res ;
public $error = "";
public function __construct($number,$type = "",$change_type = ""){
if($change_type === $type && $change_type !== ""){
$this->error = "出现异常";
}
if($type !== ""){
$this->type = intval($type);
}
if($change_type !== ""){
$this->change_type = intval($change_type);
}
if($this->type == 2){
$this->binary_number = $number;
}else if($this->type == 10){
if($number >= 9223372036854775808){
$this->error = "超出精度,本方法只限制在long整型下";
}
$this->number = $number;
}else if($this->type == 8){
$this->eight_number = $number;
}else if($this->type == 16){
$this->hexadecimal_number = $number;
}else{
$this->error = "出现异常";
}
$this -> run();
}
private function run (){
// 处理二进制
$this-> number_change();
}
private function number_change(){
if($this->change_type == 2){
$res = $this -> binnary_change();
}else if($this->change_type == 8){
$res = $this -> eight_change();
}else if($this->change_type == 10){
$res = $this -> ten_change();
}else if($this->change_type == 16){
$res = $this -> hexadecimal_change();
}else {
return false;
}
$this->res = $res;
}
// 切换二进制
private function binnary_change(){
// 8 10 16 -> 2
if($this->type == 10){
return decbin($this->number);
}else if($this->type == 8){
$this->number = $this-> ten_change();
return decbin($this->number);
}else if($this->type == 16){
$this->number = $this-> ten_change();
return decbin($this->number);
}
}
// 切换八进制
private function eight_change(){
if($this->type == 10){
$res = decoct($this->number);
}else if($this->type == 2){
$this->number = $this-> ten_change();
$res = decoct($this->number);
}else if($this->type == 16){
$this->number = $this-> ten_change();
$res = decoct($this->number);
}
return $res ;
}
// 切换十进制
private function ten_change(){
if($this->type == 2){
$res = bindec($this->binary_number);
}else if($this->type == 10){
$res = octdec($this->eignt_number);
}else if($this->type == 16){
$res = hexdec($this->hexadecimal_number);
}
if($res >= 9223372036854775808){
if($this->type == 16){
$error = "16进制 超出精度";
}else if($this->type == 10){
$error = "超出精度,本方法只限制在long整型下";
}else if($this->type == 2){
$error = "2进制 超出精度";
}
$this->error = $error;
}
return $res ;
}
// 切换十六进制
private function hexadecimal_change(){
if($this->type == 10){
return dechex($this->number);
}else if($this->type = 2){
return bin2hex($this->binary_number);
}else if($this->type = 8){
$this->number = $this-> ten_change();
return bin2hex($this->binary_number);
}
}
}
// 任意转换
$t1=microtime(true);
// base_convert(9223372036854775807,10,16);
$suanfa = new suanfa_number("101010101010101001010101010101010100101010101111010",2,10);
$t2=microtime(true);
$time1=$t2-$t1;
var_dump($time1);
var_dump($suanfa->res);
var_dump($suanfa->error);
算法(进制切换)
最新推荐文章于 2025-08-12 12:57:50 发布
这是一个用PHP编写的数值转换类,支持十进制、二进制、八进制和十六进制之间的转换。类中包含了各种转换方法,如`binnary_change`、`eight_change`、`ten_change`和`hexadecimal_change`,并在构造函数中初始化转换参数。通过实例化该类并传入数值和目标进制,可以进行进制转换。同时,类还设有错误处理机制,当输入超出精度范围或异常时会返回错误信息。
168万+

被折叠的 条评论
为什么被折叠?



