-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