-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相同的結果。
有什麼想法?即時尋找幫助
很難理解究竟是什麼問題...但也許它與事物的「大整數」側做。 JavaScript只能處理53位整數。雖然我不確定unicode角色爲什麼需要這麼大的東西。 – Whothehellisthat
感謝您的評論。雖然我解決了另一個解決方案的問題,但由於JavaScript處理字符的方式,因此我建議閱讀本文: https://mathiasbynens.be/notes/javascript-unicode – dudu