2017-04-26 8 views
-1

imはjavaScriptでいくつかのことをしているので、テキスト文字列を10進数に変換する必要があります。長い文字列をjavascriptの大きなintに変換する

は、私が使用したPHPコードは:

function to_number($data) 
{ 
    $base = "256"; 
    $radix = "1"; 
    $result = "0"; 
    for($i = strlen($data) - 1; $i >= 0; $i--) 
    { 
    $digit = ord($data{$i}); 
    $part_res = bcmul($digit, $radix); 
    $result = bcadd($result, $part_res); 
    $radix = bcmul($radix, $base); 
    } 
    return $result; 
    } 

私はJavascriptでそれを行う必要があるので、私は六角に文字列を変換しようとしたし、その後進文字列に:

/// String into Hex 
function toHex(str) { 
    var hex = ''; 
    var i = 0; 
    while(str.length > i) { 
     hex += ''+str.charCodeAt(i).toString(16); 
     i++; 
    } 
    return hex; 
} 

//// Hex into Dec 

function h2d(s) { 

function add(x, y) { 
    var c = 0, r = []; 
    var x = x.split('').map(Number); 
    var y = y.split('').map(Number); 
    while(x.length || y.length) { 
     var s = (x.pop() || 0) + (y.pop() || 0) + c; 
     r.unshift(s < 10 ? s : s - 10); 
     c = s < 10 ? 0 : 1; 
    } 
    if(c) r.unshift(c); 
    return r.join(''); 
} 

var dec = '0'; 
s.split('').forEach(function(chr) { 
    var n = parseInt(chr, 16); 
    for(var t = 8; t; t >>= 1) { 
     dec = add(dec, dec); 
     if(n & t) dec = add(dec, '1'); 
    } 
}); 
return dec; 
} 

すべて正常に動作し、PHPとJavaScriptコードの両方が、次のような通常のStringを使用してフィードしたときと全く同じ結果を返します。

thisisasimplestring 

しかし、このような入力供給場合:

�ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ�!µ?ŲÀ]).-PSH9Ó·ÂÞ 

あるいはこれを:

�ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ�yohoo 

JavaScriptコードの結果は、PHPから切り抜いします。 私はPHPと同じ結果が必要です。

イム私は別の解決策で問題を解決したものの、ヘルプ

+0

ハード...しかし、多分それは物事の「ビッグINT」側に関係しています。 JavaScriptは53ビットの整数にしか対応できません。なぜユニコードのキャラクターに大きなものが必要なのかは分かりませんが。 – Whothehellisthat

+0

コメントありがとうございました。私は別の解決策で問題を解決しましたが、javascriptが文字を処理する方法のためにrefrenceのためにこの記事を読むことをお勧めします: https://mathiasbynens.be/notes/javascript-unicode – dudu

答えて

0

を探していますが、とてもその理由はJavascriptを(私は必要なもののような文字を)文字を処理する方法のrefrence、

str.charCodeAt(i) 

のためではないだろうその文字の正しいコードポイントを返します。

私はこの記事を読んでお勧め:問題がある正確に理解する http://mathiasbynens.be/notes/javascript-unicode

関連する問題