<?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 git.master, git.master_jit, rfc.property-hooks
- 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)
}
This tab shows result from various feature-branches currently under review by the php developers. Contact me to have additional branches featured.
Active branches
Archived branches
Once feature-branches are merged or declined, they are no longer available. Their functionality (when merged) can be viewed from the main output page
preferences:
37.81 ms | 407 KiB | 5 Q