2016-06-28 27 views
0

文字列が構成するビット数をカウントします。 Pickleは、私が「文字列の種類」が何であるかを知らないということです。ユーザーが入力したとします。 strlen()は文字列のバイト数を返しますので、単純に8を掛けてもかまいませんが、sha256ハッシュが供給されていれば元の64ビット長の256ビットです。ここでstrlen()* 8ロジックを適用すると512ビットが得られます。だからここ文字列のビット数をカウントする

は私の仕事は周りです:

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

だから、文字列がで構成されているビットの数をカウントするための適切な方法は何ですか?私は文字列が完全にhexitsで構成されていない場合は、常に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); 

最初のコードのリターンリターン長hesh、ストリング内 二コード戻り長ビット。 http://sandbox.onlinephpfunctions.com/code/777ac7c4528357ee21426ad7cab6dcdbdd00edf0 これはリンクの例です。

+0

この機能はfrom/toのベースで提供する必要があります。私は可能な場合は、ユーザーが指定した文字列を変換する可能性があるかどうかを知りたいと思っていた。これは、@deceze –

関連する問題