簡體   English   中英

將字符串轉換為二進制並返回字符串與 PHP 不同

[英]Converting string to binary and back to string is not the same with PHP

我想出了下面的 PHP 代碼,它將二進制字符串00000010轉換為字符串“表示”,然后我將其轉換回二進制字符串,但是它沒有返回相同的原始二進制字符串00000010 下面的代碼與1000001011000010完美配合……但由於某些奇怪的原因,它不適用於00000010 為什么?

$binary = '00000010';
echo $binary . "\n";

$temp = pack('H*',dechex(bindec($binary)));
echo str_pad(decbin(ord($temp)),8,'0',STR_PAD_LEFT);

輸出:

00000010
00100000

我知道某些二進制字符串的某些字符串“表示”不是可見/可打印的字符,但我不在乎打印這些字符。 我只想將其轉換為該字符串“表示”並返回,但它不起作用。 我做錯了什么?

編輯:

在@Rocket Hazmat 的大力幫助下,代碼開始適用於某些二進制文件,但不適用於其他二進制文件。 例如,下面的代碼看起來不起作用,它輸出0而不是10101010

$binary = '10101010';
$temp = pack('C',base_convert($binary,2,16));
echo base_convert(ord($temp),16,2);

在這里使用pack()h* (或h )是您想要的。 您將其作為十六進制值讀取(從二進制轉換后),因此您希望pack將其視為十六進制值。

$temp = pack('h', base_convert($binary, 2, 16));

問題是當您將其轉換回來時。 ord返回一個基數為 10 的數字。 我錯誤地將其轉換為十六進制(基數 16)值:

base_convert(ord($temp), 10, 2)

不過,再次查看代碼后,我認為您甚至不需要pack()在這里。 您正在使用ord() ,所以我們可以使用它的反面, chr()

$temp = chr(base_convert($binary, 2, 10));

chr()想要一個(基數為 10)int,而不是一個十六進制值,所以讓我們使用它。

似乎有效的是以下內容:

$temp = chr(base_convert($binary, 2, 10));
echo str_pad(base_convert(ord($temp), 10, 2), 8, '0', STR_PAD_LEFT);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM