3v4l.org

run code in 300+ PHP versions simultaneously
<?php // https://stackoverflow.com/questions/35536141/converting-binary-data-to-ascii-with-php-any-possibility/35536281#35536281 function bin2ascii($input) { $output = ''; for($i=0; $i<strlen($input); $i+=8) { $output .= chr(intval(substr($input, $i, 8), 2)); } return $output; } https://stackoverflow.com/questions/6382738/convert-string-to-binary-then-back-again-using-php/6382880#6382880 function ascii2bin($input) { //return array_reduce(str_split($input), fn ($acc, $i) => $acc .= decbin(ord($i))); return array_reduce(str_split($input), fn ($acc, $i) => $acc .= str_pad(decbin(ord($i)), 8, '0', STR_PAD_LEFT)); } // https://stackoverflow.com/questions/11946696/php-signed-binary-strings/11946971#11946971 function bindec2($bin) { if (strlen($bin) == 64 && $bin[0] == '1') { for ($i = 0; $i < 64; $i++) { $bin[$i] = $bin[$i] == '1' ? '0' : '1'; } return (bindec($bin) + 1) * -1; } return bindec($bin); } $i = -114514; var_dump(decbin($i)); $trimmedPadding = ltrim(decbin($i), $i < 0 ? '1' : '0'); var_dump($trimmedPadding); $signBitsPading = $i < 0 ? str_repeat('1', 8 - strlen($trimmedPadding) % 8) : str_repeat('0', 8 - strlen($trimmedPadding) % 8); var_dump($signBitsPading . $trimmedPadding); var_dump(bin2hex(bin2ascii($signBitsPading . $trimmedPadding))); $o = rtrim(base64_encode(bin2ascii($signBitsPading . $trimmedPadding)), '='); var_dump($o); $d = base64_decode($o); var_dump(bin2hex($d)); $bits = ascii2bin($d); $signBit = $bits[0]; $paddedBits = str_pad($bits, 64, $signBit, STR_PAD_LEFT); $restBits = substr($bits, 1); var_dump($bits); var_dump($signBit); var_dump($restBits); var_dump($paddedBits); var_dump(bindec($paddedBits)); var_dump(intval($paddedBits, 2)); var_dump(bindec2($paddedBits)); $paddedHexs = str_pad($d, 8, $signBit === '0' ? "\x00" : "\xFF", STR_PAD_LEFT); // 保持decbin()输出的大端序octet var_dump(bin2hex($paddedHexs)); var_dump(unpack('q', $paddedHexs)); // signed long long (always 64 bit, machine byte order) var_dump(unpack('Q', $paddedHexs)); // unsigned long long (always 64 bit, machine byte order) var_dump(unpack('J', $paddedHexs)); // unsigned long long (always 64 bit, big endian byte order) var_dump(unpack('P', $paddedHexs)); // unsigned long long (always 64 bit, little endian byte order) $paddedHexs = str_pad(strrev($d), 8, $signBit === '0' ? "\x00" : "\xFF", STR_PAD_RIGHT); // 大端序转小端序octet var_dump(bin2hex($paddedHexs)); var_dump(unpack('q', $paddedHexs)); // signed long long (always 64 bit, machine byte order) var_dump(unpack('Q', $paddedHexs)); // unsigned long long (always 64 bit, machine byte order) var_dump(unpack('J', $paddedHexs)); // unsigned long long (always 64 bit, big endian byte order) var_dump(unpack('P', $paddedHexs)); // unsigned long long (always 64 bit, little endian byte order)
Output for 8.0.1 - 8.0.30, 8.1.0 - 8.1.29, 8.2.0 - 8.2.23, 8.3.0 - 8.3.11
string(64) "1111111111111111111111111111111111111111111111100100000010101110" string(17) "00100000010101110" string(24) "111111100100000010101110" string(6) "fe40ae" string(4) "/kCu" string(6) "fe40ae" string(24) "111111100100000010101110" string(1) "1" string(23) "11111100100000010101110" string(64) "1111111111111111111111111111111111111111111111100100000010101110" float(1.8446744073709437E+19) int(9223372036854775807) int(-114514) string(16) "fffffffffffe40ae" array(1) { [1]=> int(-5890427937135525889) } array(1) { [1]=> int(-5890427937135525889) } array(1) { [1]=> int(-114514) } array(1) { [1]=> int(-5890427937135525889) } string(16) "ae40feffffffffff" array(1) { [1]=> int(-114514) } array(1) { [1]=> int(-114514) } array(1) { [1]=> int(-5890427937135525889) } array(1) { [1]=> int(-114514) }

preferences:
69.95 ms | 408 KiB | 5 Q