2017-04-26 45 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