[英]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 個字符,但在給出數字時不能重復直到結束。
我認為它不適用於 unpack,因為$fullNameBin
不是 binary ,而是二進制數據的字符串表示形式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.