我原本打算使用一个长字符串来操作大量的位标志,并将结果字符串保存在Redis中。然而,我遇到了一个php的bug(?)。使用substr()
读取包含位00001101
的字节时,返回了一个意外的值:
$bin = 0b00001101; // 13 - ASCII Carriage return
$c = substr($bin, 0, 1); // read this character
printf("Expectation: 00001101, reality: %08b\n", $c); // 00000001
假设substr()
是二进制安全的,这种假设是错误的吗?我也尝试了mb_substr()
,将编码设置为8bit
,结果完全相同。