php轉換成二進制
A. php代碼中如何找出字元串中指定的字元並轉換為二進制
preg_match_all可以實現查找
decbin可以實現10進制轉2進制
B. PHP中怎麼以二進制形式表示數字
需要准備的材料分別是:電腦、php編輯器、瀏覽器。
1、首先,打開php編輯器,新建php文件,例如:index.php。
C. PHP 字元串 二進制
不知道樓主問的是不是php中把字元串轉換成二進制的函數?如果是的話,可以進行如下處理
ASCII(str)
返回字元串str的最左面字元的ASCII代碼值。如果str是空字元串,返回0。如果str是NULL,返回NULL。
ORD(str)
如果字元串str最左面字元是一個多位元組字元,通過以格式((first byte ASCII code)*256+(second byte ASCII code))[*256+third byte ASCII code...]返回字元的ASCII代碼值來返回多位元組字元代碼。如果最左面的字元不是一個多位元組字元。返回與ASCII()函數返回的相同值。
CONV(N,from_base,to_base)
在不同的數字基之間變換數字。返回數字N的字元串數字,從from_base基變換為to_base基,如果任何參數是NULL,返回NULL。參數N解釋為一個整數,但是可以指定為一個整數或一個字元串。最小基是2且最大的基是36。如果to_base是一個負數,N被認為是一個有符號數,否則,N被當作無符號數。 CONV以64位點精度工作。
BIN(N)
返回二進制值N的一個字元串表示,在此N是一個長整數(BIGINT)數字,這等價於CONV(N,10,2)。如果N是NULL,返回NULL。
OCT(N)
返回八進制值N的一個字元串的表示,在此N是一個長整型數字,這等價於CONV(N,10,8)。如果N是NULL,返回NULL。
HEX(N)
返回十六進制值N一個字元串的表示,在此N是一個長整型(BIGINT)數字,這等價於CONV(N,10,16)。如果N是NULL,返回NULL。
CHAR(N,...)
CHAR()將參數解釋為整數並且返回由這些整數的ASCII代碼字元組成的一個字元串。NULL值被跳過。
CONCAT(str1,str2,...)
返回來自於參數連結的字元串。如果任何參數是NULL,返回NULL。可以有超過2個的參數。一個數字參數被變換為等價的字元串形式。
LENGTH(str)
OCTET_LENGTH(str)
CHAR_LENGTH(str)
CHARACTER_LENGTH(str)
返回字元串str的長度。
LOCATE(substr,str)
POSITION(substr IN str)
返回子串substr在字元串str第一個出現的位置,如果substr不是在str裡面,返回0.
LOCATE(substr,str,pos)
返回子串substr在字元串str第一個出現的位置,從位置pos開始。如果substr不是在str裡面,返回0。
INSTR(str,substr)
返回子串substr在字元串str中的第一個出現的位置。這與有2個參數形式的LOCATE()相同,除了參數被顛倒。
LPAD(str,len,padstr)
返回字元串str,左面用字元串padstr填補直到str是len個字元長。
RPAD(str,len,padstr)
返回字元串str,右面用字元串padstr填補直到str是len個字元長。
LEFT(str,len)
返回字元串str的最左面len個字元。
RIGHT(str,len)
返回字元串str的最右面len個字元。
SUBSTRING(str,pos,len)
SUBSTRING(str FROM pos FOR len)
MID(str,pos,len)
從字元串str返回一個len個字元的子串,從位置pos開始。使用FROM的變種形式是ANSI sql92語法。
SUBSTRING(str,pos)
SUBSTRING(str FROM pos)
從字元串str的起始位置pos返回一個子串。
SUBSTRING_INDEX(str,delim,count)
返回從字元串str的第count個出現的分隔符delim之後的子串。如果count是正數,返回最後的分隔符到左邊(從左邊數) 的所有字元。如果count是負數,返回最後的分隔符到右邊的所有字元(從右邊數)。
LTRIM(str)
返回刪除了其前置空格字元的字元串str。
RTRIM(str)
返回刪除了其拖後空格字元的字元串str。
TRIM([[BOTH | LEADING | TRAILING] [remstr] FROM] str)
返回字元串str,其所有remstr前綴或後綴被刪除了。如果沒有修飾符BOTH、LEADING或TRAILING給出,BOTH被假定。如果remstr沒被指定,空格被刪除。
SOUNDEX(str)
返回str的一個同音字元串。聽起來「大致相同」的2個字元串應該有相同的同音字元串。一個「標准」的同音字元串長是4個字元,但是SOUNDEX()函數返回一個任意長的字元串。你可以在結果上使用SUBSTRING()得到一個「標准」的 同音串。所有非數字字母字元在給定的字元串中被忽略。所有在A-Z之外的字元國際字母被當作母音。
SPACE(N)
返回由N個空格字元組成的一個字元串。
REPLACE(str,from_str,to_str)
返回字元串str,其字元串from_str的所有出現由字元串to_str代替。
REPEAT(str,count)
返回由重復countTimes次的字元串str組成的一個字元串。如果count <= 0,返回一個空字元串。如果str或count是NULL,返回NULL。
REVERSE(str)
返回顛倒字元順序的字元串str。
INSERT(str,pos,len,newstr)
返回字元串str,在位置pos起始的子串且len個字元長得子串由字元串newstr代替。
ELT(N,str1,str2,str3,...)
如果N= 1,返回str1,如果N= 2,返回str2,等等。如果N小於1或大於參數個數,返回NULL。ELT()是FIELD()反運算。
FIELD(str,str1,str2,str3,...)
返回str在str1, str2, str3, ...清單的索引。如果str沒找到,返回0。FIELD()是ELT()反運算。
FIND_IN_SET(str,strlist)
如果字元串str在由N子串組成的表strlist之中,返回一個1到N的值。一個字元串表是被「,」分隔的子串組成的一個字元串。如果第一個參數是一個常數字元串並且第二個參數是一種類型為SET的列,FIND_IN_SET()函數被優化而使用位運算!如果str不是在strlist裡面或如果strlist是空字元串,返回0。如果任何一個參數是NULL,返回NULL。如果第一個參數包含一個「,」,該函數將工作不正常。
MAKE_SET(bits,str1,str2,...)
返回一個集合 (包含由「,」字元分隔的子串組成的一個字元串),由相應的位在bits集合中的的字元串組成。str1對應於位0,str2對應位1,等等。在str1, str2, ...中的NULL串不添加到結果中。
EXPORT_SET(bits,on,off,[separator,[number_of_bits]])
返回一個字元串,在這里對於在「bits」中設定每一位,你得到一個「on」字元串,並且對於每個復位(reset)的位,你得到一個「off」字元串。每個字元串用「separator」分隔(預設「,」),並且只有「bits」的「number_of_bits」 (預設64)位被使用。
LCASE(str)
LOWER(str)
返回字元串str,根據當前字元集映射(預設是ISO-8859-1 Latin1)把所有的字元改變成小寫。該函數對多位元組是可靠的。
UCASE(str)
UPPER(str)
返回字元串str,根據當前字元集映射(預設是ISO-8859-1 Latin1)把所有的字元改變成大寫。該函數對多位元組是可靠的。
LOAD_FILE(file_name)
讀入文件並且作為一個字元串返迴文件內容。文件必須在伺服器上,你必須指定到文件的完整路徑名,而且你必須有file許可權。文件必須所有內容都是可讀的並且小於max_allowed_packet。如果文件不存在或由於上面原因之一不能被讀出,函數返回NULL。
另外,MySQL必要時自動變換數字為字元串,並且反過來也如此:
mysql> SELECT 1+"1";
-> 2
mysql> SELECT CONCAT(2,' test');
-> '2 test'
如果你想要明確地變換一個數字到一個字元串,把它作為參數傳遞到CONCAT()。
如果字元串函數提供一個二進制字元串作為參數,結果字元串也是一個二進制字元串。被變換到一個字元串的數字被當作是一個二進制字元串。這僅影響比較。
終於打完了,樓主如果還需要其他解釋請提出來
D. php 的位運算總結
php的位運算很少會用到,但是用處很大,
在有些演算法中會用到,在許可權管理中也會經常用到,
對於理解計算機的世界也會有一定的幫助,所以得把這些重要但不常用的東西總結一下記錄一下。
提到位運算,避不開的是二進制。
因為位運算是直接在內存做操作和運算,相較與直接拿兩個變數做運算符肯定是更快的。
很多地方把二進制這玩意說得很晦澀,現在來以最簡單的方式來總結一下,當然只算 int 范圍內的數算了,超過了這個范疇程序員還不如拿這時間去學點別的。
說完以上總結,再來解釋下什麼是二進制,網上大把,
但只要記住,int范圍內的數也就是我們大部分需要用到的數,都可以用二進制來表示。
我們生活中用到的計數方式為十進制,由個數位滿10進1,
然後再開始重新計算,等十位滿9再加一時,百位加一,十位歸零。
二進制則只有兩個數字來表示就是0和1,滿2進1。
由32個位組成,雖然只有32個位但已滿足了我們正常的需求了
比如說1轉換為2進制原碼,由於1是正數所以符號位為0,
原碼反碼補碼都一個樣。
1的原碼:00000000 00000000 00000000 00000001
因手懶,太多0太丑用+拼接,Ɔ* 8'代表8個0
2的原碼:0* 8 0* 8 0* 8 0* 6 + 1 0,既然是二進制,
滿2就得進1,最低位歸0,向前加一。
再來解釋下負數的原碼反碼和補碼,就開始講php的位運算了。
二進制復習完畢。下面開始講講php的位運算。
php一共有六種位運算,一種一種來講。
可以這么理解,兩個數的補碼放在一起比較每個位(一共32個位),
可以得出另外一個數,這個數字的組成由比較的兩位數字生成,
如果兩個數的每個位數上的數字都等於1的話,
那得到的那個數的補碼的同位為1,否則為0。
聽著繞口,其實很簡單,覺得還是比官網上的更容易讓新手看懂
下面舉例子:
首先來求-1和7的補碼。7的原碼就是補碼。
兩個補碼都有了下面開始運算:
按照上面的說法, 每個位都有一樣則 $a 的同等位則為1,剛好-1的補碼和7的補碼前面都不一樣,就最後三位一樣,所以剛好求得的 $a 的補碼的最後三位是1而其他的都是0 ,剛好這個補碼為正數,正好就是7。
其實就是和按位與相反,只要有1個為1,那就為1,如果都不為1,那就為0。
$a = -1|7 ;得出來的 $a 補碼為32個1,但此時不能說 $a 就是-1,因為這只是補碼,要轉成原碼再轉成十進制數,補碼-1,然後再翻轉,再轉出來,得到的其實也還是-1。
就是將這個數的補碼全部翻轉過來,包括符號位,0變1,1變0
取反的結果一定是整數變負數負數變正數,取正數的反時,
記得一定要從補碼一步步轉到原碼再轉成十進制數才是答案。
兩個數的補碼比較,同等位上的兩數比較
,不一樣時,則答案的補碼的同位則為1,否則為0。
往左移符號位被擠走右邊0補充,往右移動,符號位不動,
高位以符號位補充。二進制世界裡往左移動其實是相當於乘以了2,
右移相當於除以了2。
不吹牛逼的說,這應該是互聯網上最容易理解的php位運算的解釋和二進制的解釋了。
原文鏈接: php的位運算總結-PHP
E. PHP函數怎麼把十進制轉換為二進制
PHP decbin函數的作用是把十進制轉換為二進制。
用法:
參數 描述
dec_number 必需。規定要轉換的十進制數。
示例:
<?php
echodecbin("3");
echodecbin("1");
echodecbin("1587");
echodecbin("7");
?>
輸出:
11
1
11000110011
111
F. php 怎麼把字元串轉化為二進制流
header("Content-type: text/html; charset=utf-8");
/**
* 將字元串轉換成二進制
* @param type $str
* @return type
*/
function StrToBin($str){
//1.列出每個字元
$arr = preg_split('/(?
//2.unpack字元
foreach($arr as &$v){
$temp = unpack('H*', $v); $v = base_convert($temp[1], 16, 2);
unset($temp);
}
return join(' ',$arr);
}
/**
* 講二進制轉換成字元串
* @par
G. 求解 使用php將1000位的十進制大數轉成二進制
下面的代碼測試通過的,我只用幾10位進行測試,理論上成千上萬位結果也是正確的,供你參考,演算法比較笨蛋(完全模仿人工的除2取余):
<?php
//超大整數(10進制)轉換為二進制數
$n='845';
//$n='15';//1111
//$n='257';//100000001
$r='';//結果
while($n){
//$n整除2,商$m、余數$k
$k=0;
$m='';
do{
$k=$k*10+substr($n,0,1);
if($m!=''||$k>1)$m.=floor($k/2);
$k=$k%2;
$n=substr($n,1);
//$r=$k.$r;
}while($n!='');
//echo"r=$r;m=$m ";//break;
//下一輪除法
$n=$m;
$r=$k.$r;
}
echo$r;
?>
H. 怎樣在PHP中把16進制HEX數據轉換為2進制數據呢
十六進制轉為二進制有兩種理解方法,第一是十六進制字元串轉二進制字元串,第二是十六進制數轉二進制數,下面分別介紹2種轉換方法:
1.hex2bin函數可以將十六進制字元串轉換為二進制字元串,詳細用法如下:
hex2bin — 轉換十六進制字元串為二進制字元串
stringhex2bin(string$data)
轉換十六進制字元串為二進制字元串。
參數:
data:十六進製表示的數據
返回值:
返回給定數據的二進製表示 或者在失敗時返回 FALSE。
異常:
如果輸入的十六進制字元串是奇數長數或者無效的十六進制字元串將會拋出E_WARNING 級別的錯誤。
示例:
$hex=hex2bin("");
echo$hex;//examplehexdata(其中16進制代表的是ascii碼)
2.base_convert是真正意義上的進制轉換函數
base_convert — 在任意進制之間轉換數字
stringbase_convert(string$number,int$frombase,int$tobase)
返回一字元串,包含 number以 tobase 進制的表示。number 本身的進制由frombase指定。frombase 和 tobase 都只能在2 和 36 之間(包括 2 和 36)。高於十進制的數字用字母 a-z 表示,例如a 表示 10,b 表示 11 以及 z 表示 35。
參數:
number:要轉換的數字
frombase:原始進制
tobase:轉換後的進制
示例:
$hexadecimal='A37334';
echobase_convert($hexadecimal,16,2);//101000110111001100110100
I. PHP 如何將字元串、數字等轉換為二進制數組
<?php
$data = "PHP";
print_r(unpack("C*",$data));
?>
輸出:
Array
(
[1] => 80
[2] => 72
[3] => 80
)
J. php如何讓變數里的值為二進制,我轉換了但是一運算就變成十進制了,右移>>之後就變成十進制了
無論什麼語言中的位運算符都是按照計算機內的二進制而言的。
所以在人為計算的時候要將十進制的數字轉化為二進制的數字運算後計算,再轉回十進制即是答案。
我們來舉個簡單的例子吧。
2 & 1 = 0
其運算過程為(這後面的都是二進制) 10 & 01,第一位1和0求與是0,第二位0和1求與為0,結果是00那答案就是0
來個復雜點的。
10 & 11 = 10;
換成二進制 1010 & 1011 = 1010 答案還是10;
所有的為運算符都是基於二進制來產生的。所以在&(與)、|(或)、^(異或)這三個預算中,要將兩個或者更多運算數據轉化為二進制數字,逐位進行運算。
~(取反)運算則更簡單,轉化為二進制以後0則寫為1,1則寫為0,然後再轉回十進制就OK
最後來說說<<(進位)與>>(退位)。同樣,位運算也是基於二進制的。將運算符前的值轉化為二進制,運算符後的數可以還保留十進制。然後看作小數點位置不變,然所有數字(包括前後有無限個0),向左(進位)或向右(退位)移動N個數位,N則是運算符右邊的數字。
舉個例子 10<< 3 二進制轉化1010 << 3
這個可以看作1010.000 << 3 然後保持小數點位置不變,所有數字整體向左位移3位。
結果就是1010000,轉回十進制80。
對於進位而言,每進一位相當於乘2,每退一位相當於除2。
有問題追問