在JavaScript中将长字符串转换为大型int

时间:2017-04-26 20:03:27

标签: javascript regex string bigint

我在javaScript中做一些事情,因此需要将Text String转换为Decimal。

我使用的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转换为Hex然后转换为十进制字符串:

/// 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代码返回完全相同的结果:

thisisasimplestring

但在输入这样的输入时:

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

甚至是这样:

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

javascript代码的结果将与php不同。 我需要一个与php相同的结果。

有什么想法吗?我正在寻求帮助

1 个答案:

答案 0 :(得分:0)

虽然我用另一个解决方案解决了这个问题,但是因为javascript处理字符(我需要的字符)的方式引用它,所以

str.charCodeAt(i)

不会为该字符返回正确的代码点。

我建议阅读这篇文章: http://mathiasbynens.be/notes/javascript-unicode