2017-06-20 203 views

回答

1

random_bytes返回二進制數據,但不是可讀的格式。如果你想真正代表它爲1和0的字符串,你需要首先使用PHP的bin2*功能之一轉換,然後用base_convert將其轉換回:

<?php 
function random_binary($bytes) { 
    return base_convert(bin2hex(random_bytes($bytes)), 16, 2); 
} 

echo random_binary(1); 

// 10000011 

這將只工作了到系統的整數限制(在64位系統上可能爲2^63-1)。如果你有安裝了GMP擴展,可以使用任意精度如下:

<?php 
function random_binary($bytes) { 
    $hex = bin2hex(random_bytes($bytes)); 
    return gmp_strval(gmp_init($hex, 16), 2); 
} 

echo random_binary(40); 

// 10000000101110000010011111001011011100111110... 
+0

爲什麼有時候二進制文件只有0? 字符串(40)「e1b813b168a91d6bffd1022c7c998e7ace328240」 串(64)「0000000000000000000000000000000000000000000000000000000000000000」 –

+0

這是由於浮點精度,在base_convert的文檔的警告:http://php.net/base_convert – hakre

+0

base_convert只會工作到您的系統的整數限制,很可能只有8字節(2^63 - 1)。我已經添加了另一種解決方案,但它依賴於GMP擴展。 – iainn

相關問題