2015-08-06 19 views
6

Çok sayıda bit işaretini işlemek için uzun bir dize kullanacağım ve sonuç dizesini Redis'te tutacaktım. Ancak, bir php böcek (?) Üzerine tökezledi. substr() ikili güvenli yanlış olduğunu varsayımPHP substr(), ASCII satır sonu baytını neden değiştiriyor?

$bin = 0b00001101; // 13 - ASCII Carriage return 
$c = substr($bin, 0, 1); // read this character 
printf("Expectation: 00001101, reality: %08b\n", $c); // 00000001 

Ideone

mi: substr() kullanarak okumak 00001101 bitleri içeren bir bayt beklenmeyen bir değer verir? Ayrıca, aynı sonucu ile 8bit kodlama ayarlayarak mb_substr() çalıştı. Sen karşı substr() bir dize ("13")

Bunu dizenin birinci karakteri okuyorsanız için döküm olduğunu Kullanarak bir tamsayı13

için kuruyorsun

cevap

4

("1")

printf() ile %b, açıkça bir tamsayı 1

argüman bir tamsayı olarak ele ve ikili sayı olarak sunulur geri o dizeyi döküm ediyoruz.

DÜZENLEME

Bu kod

$bin = 0b00001101; // 13 - ASCII Carriage return 
$c = substr(chr($bin), 0, 1); // read this character 
printf("Expectation: 00001101, reality: %08b\n", ord($c)); // 00001101 
+0

Teşekkür bekliyorsanız sonucu vermelidir! Muhtemelen problemin kötü bir örneğini/izolasyonunu yarattım. Aslında daha uzun bir ikili dizgim var, ondan özel bir bayt okuyorum. Örneği yeniden yazacak. – Serge

+0

Doğru, şimdi anladım. Tekrar teşekkürler! – Serge