大整數(shù)需要用GMP模塊,或者自己算法好可以寫簡單的累加,
創(chuàng)新互聯(lián)是一家以成都網(wǎng)站建設(shè)公司、網(wǎng)頁設(shè)計(jì)、品牌設(shè)計(jì)、軟件運(yùn)維、網(wǎng)站推廣、小程序App開發(fā)等移動(dòng)開發(fā)為一體互聯(lián)網(wǎng)公司。已累計(jì)為成都護(hù)欄打樁機(jī)等眾行業(yè)中小客戶提供優(yōu)質(zhì)的互聯(lián)網(wǎng)建站和軟件開發(fā)服務(wù)。
在php.ini中開啟模塊extension=php_gmp.dll
?php
$n = gmp_init('58915248108339c6ddca5553e9f266124e7af7c8',16); //16進(jìn)制輸入
$n = gmp_add($n,1); //加1
echo gmp_strval($n,16).'br/'; //16進(jìn)制顯示
$n = gmp_add($n,13869656); //加法
echo gmp_strval($n,16).'br/'; //16進(jìn)制顯示
輸出
58915248108339c6ddca5553e9f266124e7af7c9
58915248108339c6ddca5553e9f266124f4e9a21
最簡單的就是base_convert()函數(shù),可以實(shí)現(xiàn)2進(jìn)制,8進(jìn)制,10進(jìn)制,16進(jìn)制間的任意轉(zhuǎn)換,
還有hexdec()可以實(shí)現(xiàn)16進(jìn)制轉(zhuǎn)換成10進(jìn)制。
//字符串轉(zhuǎn)換成16進(jìn)制
function str2hex($str){
$hex = '';
for($i=0,$length=mb_strlen($str); $i$length; $i++){
$hex .= dechex(ord($str{$i}));
}
return $hex;
}
//16進(jìn)制轉(zhuǎn)換成字符串
function hex2str($hex){
$str = '';
$arr = str_split($hex, 2);
foreach($arr as $bit){
$str .= chr(hexdec($bit));
}
return $str;
}
function test(){
//utf8字符測試
$str = '中文';
echo mb_strlen($str);
echo '';
$hex = str2hex($str);
echo $hex;
echo '';
$dec = hex2str($hex);
echo $dec;
echo "";
echo "hr";
//gbk測試
$gbkstr = mb_convert_encoding($str,'GBK','UTF-8');
echo mb_strlen($gbkstr);
echo '';
$hex = str2hex($gbkstr);
echo $hex;
echo '';
$dec = mb_convert_encoding(hex2str($hex), 'UTF-8', 'GBK');
echo $dec;
echo "";
}
十六進(jìn)制轉(zhuǎn)為二進(jìn)制有兩種理解方法,第一是十六進(jìn)制字符串轉(zhuǎn)二進(jìn)制字符串,第二是十六進(jìn)制數(shù)轉(zhuǎn)二進(jìn)制數(shù),下面分別介紹2種轉(zhuǎn)換方法:
1.hex2bin函數(shù)可以將十六進(jìn)制字符串轉(zhuǎn)換為二進(jìn)制字符串,詳細(xì)用法如下:
hex2bin — 轉(zhuǎn)換十六進(jìn)制字符串為二進(jìn)制字符串
string?hex2bin(string?$data)
轉(zhuǎn)換十六進(jìn)制字符串為二進(jìn)制字符串。
參數(shù):
data:十六進(jìn)制表示的數(shù)據(jù)
返回值:
返回給定數(shù)據(jù)的二進(jìn)制表示 ?或者在失敗時(shí)返回 FALSE。
異常:
如果輸入的十六進(jìn)制字符串是奇數(shù)長數(shù)或者無效的十六進(jìn)制字符串將會(huì)拋出E_WARNING 級(jí)別的錯(cuò)誤。
示例:
$hex?=?hex2bin("6578616d706c65206865782064617461");
echo?$hex;//example?hex?data(其中16進(jìn)制代表的是ascii碼)
2.base_convert是真正意義上的進(jìn)制轉(zhuǎn)換函數(shù)
base_convert — 在任意進(jìn)制之間轉(zhuǎn)換數(shù)字
string?base_convert(?string?$number,?int?$frombase,?int?$tobase)
返回一字符串,包含 number以 tobase 進(jìn)制的表示。number 本身的進(jìn)制由frombase指定。frombase 和 tobase 都只能在2 和 36 之間(包括 2 和 36)。高于十進(jìn)制的數(shù)字用字母 a-z 表示,例如a 表示 10,b 表示 11 以及 z 表示 35。
參數(shù):
number:要轉(zhuǎn)換的數(shù)字
frombase:原始進(jìn)制
tobase:轉(zhuǎn)換后的進(jìn)制
示例:
$hexadecimal?=?'A37334';
echo?base_convert($hexadecimal,?16,?2);//101000110111001100110100
把文件里面的每一個(gè)字節(jié)的ascii碼轉(zhuǎn)成16進(jìn)制就可以了,如下:
$content?=?file_get_contents("myfile");
$hex?=?"";
for($i=0;$i=strlen($content);$i++){
$asc?=?ord(substr($content,$i,1));
$hex?.=?dechex($asc);
}
file_put_contents("mynewfile",$hex);