2017-04-26 42 views
-1

即时通讯在javaScript中执行一些操作,因此需要将文本字符串转换为十进制。将一个长字符串转换为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代码返回完全相同的结果,当我给他们一个普通字符串,如:

thisisasimplestring 

但供给这样的输入时:

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

甚至这样的:

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

JavaScript代码的结果将从PHP被不同势。 我需要一个与php相同的结果。

有什么想法?即时寻找帮助

+0

很难理解究竟是什么问题...但也许它与事物的“大整数”侧做。 JavaScript只能处理53位整数。虽然我不确定unicode角色为什么需要这么大的东西。 – Whothehellisthat

+0

感谢您的评论。虽然我解决了另一个解决方案的问题,但由于JavaScript处理字符的方式,因此我建议阅读本文: https://mathiasbynens.be/notes/javascript-unicode – dudu

回答

0

虽然我解决了另一个解决方案的问题,但对于refrence它,因为JavaScript的处理字符(比如那些我需要的字符)的方式,因此

str.charCodeAt(i) 

不会为该角色返回一个正确的代码点。

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