2016-06-28 90 views
0

我想計算一個字符串所包含的位數。 Pickle是我不知道「它是什麼類型的字符串」,假設它的用戶輸入。由於strlen()返回string所擁有的字節數,我們可以簡單地乘以8,但如果它提供了sha256散列(當raw爲64位字符時爲256位),該怎麼辦呢?在這裏應用strlen()* 8邏輯會給我512位。計算字符串中的位數

因此,這裏是我的解決方法:

private function countBits(string $key) : int 
{ 
    $bits = (ctype_xdigit($key)) ? 4 : 8; 
    return strlen($key)*$bits; 
} 

因此是計算該字符串包含的位數是正確的方法是什麼?我的意思是如果字符串不是完全由六進制組成的,那麼它應該總是乘以8,對吧?或者還有一些收穫?

+1

字符串中的位數完全取決於其長度(以字節爲單位),而不是通過解釋其內容....您將一組字符(1-9/af)解釋爲表示位,但是字符串不知道或者關心那個解釋 –

+0

函數之後是什麼':int'? – Drone

+2

@babuji - 返回類型提示 –

回答

0

由於內部大小爲256位,但塊大小爲512位。

簡單expirement

<?php 

$string = 'test'; 
$key = hash('sha256',$string); 
$value = bin2hex($key); 



function str_baseconvert($str, $frombase=10, $tobase=36) { 
    $str = trim($str); 
    if (intval($frombase) != 10) { 
     $len = strlen($str); 
     $q = 0; 
     for ($i=0; $i<$len; $i++) { 
      $r = base_convert($str[$i], $frombase, 10); 
      $q = bcadd(bcmul($q, $frombase), $r); 
     } 
    } 
    else $q = $str; 

    if (intval($tobase) != 10) { 
     $s = ''; 
     while (bccomp($q, '0', 0) > 0) { 
      $r = intval(bcmod($q, $tobase)); 
      $s = base_convert($r, 10, $tobase) . $s; 
      $q = bcdiv($q, $tobase, 0); 
     } 
    } 
    else $s = $q; 

    return $s; 
} 

var_dump(str_baseconvert($key,16,2)); 
var_dump(strlen($key)*8); 

第一碼返回返回長度碎甲彈,在串 二次代碼返回長度的比特。 http://sandbox.onlinephpfunctions.com/code/777ac7c4528357ee21426ad7cab6dcdbdd00edf0 你可以看到這是鏈接的例子。

+0

該功能必須從/到/從基地提供。我正在查看是否有可能轉換用戶提供的字符串,這可能與@deceze指出的不同 –