簡體   English   中英

在 PHP 中將二進制字符串轉換為十六進制

[英]Converting binary string to hex in PHP

我有一個二進制文本字符串,它是 8 個字符的倍數。 以以下為例。

$fullNameBin = "01010001000010110110010000010011000110000111100011001011111110110100111100111100";

我希望將其轉換為十六進制。 請注意,每個字節的位從最低有效到最高有效順序,所以上面應該導致

$fullNameCoded = "8AD026C8181ED3DFF23C";

在 Perl 中,可以使用

my $fullNameCoded = "";
for ( unpack( '(A8)*', $fullNameBin ) ) {
   $fullNameCoded .= sprintf( "%02X", oct( "0b" . reverse( $_ ) ) );
}

或者

my $fullNameCoded = uc unpack 'H*', pack 'b*', $fullNameBin;

PHP 的打包/解包比 Perl 的要有限得多,天真的翻譯是徒勞的。

foreach ( unpack( "A8*", $fullNameBin) as $item ) {
   $fullNameCoded .= sprintf( "%02X", octdec( "0b" . strrev( $item ) ) );
}

我所做的是將二進制字符串表示拆分為 8 個字符,將其反轉並從中創建十六進制表示並將它們大寫。

$fullNameBin      = "01010001000010110110010000010011000110000111100011001011111110110100111100111100";
$fullNameCoded    = '';
foreach(str_split($fullNameBin, 8) as $char) {
    $fullNameCoded .= strtoupper(dechex(bindec(strrev($char))));
}

8AD026C8181ED3DFF23C

我可能完全錯了,請任何人糾正我:

對我來說,解包“A8 *”似乎可以從字符串中獲取 8 個字符,但在給出數字時不能重復直到結束。

  • "A*" 將給出整個字符串。
  • “A8”將給出 8 個字符
  • "A8*" 也只會給出 8 並且不會重復

結論

我認為它不適用於 unpack,因為$fullNameBin不是 binary ,而是二進制數據的字符串表示形式

暫無
暫無

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

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