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と同じ結果が必要です。
イム私は別の解決策で問題を解決したものの、ヘルプ
ハード...しかし、多分それは物事の「ビッグINT」側に関係しています。 JavaScriptは53ビットの整数にしか対応できません。なぜユニコードのキャラクターに大きなものが必要なのかは分かりませんが。 – Whothehellisthat
コメントありがとうございました。私は別の解決策で問題を解決しましたが、javascriptが文字を処理する方法のためにrefrenceのためにこの記事を読むことをお勧めします: https://mathiasbynens.be/notes/javascript-unicode – dudu