메신저 자바 스크립트에서 몇 가지 일을하고 따라서 10 진수로 텍스트 문자열을 변환해야합니다.자바 스크립트에서 긴 문자열을 큰 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;
}
내가 자바 스크립트에서 그것을 할 필요가 있기 때문에 내가 진수로 문자열을 변환하는 시도 후 진수 문자열로 :
/// 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와 자바 스크립트 코드는 다음과 같은 정규 문자열로 피드 할 때 똑같은 결과를 반환합니다.
thisisasimplestring
,363,210
그러나 이와 같은 입력에 공급했을 때
�ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ�!µ?ŲÀ]).-PSH9Ó·ÂÞ
또는이를 :
�ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ�yohoo
자바 스크립트 코드의 결과는 PHP로부터 diffrent한다. 나는 php와 같은 결과가 필요하다.
아이디어가 있으십니까? 메신저 내가 다른 솔루션으로 문제를 해결하지만, 도움
하드 정확히 문제가 무엇인지 이해하는 ...하지만 어쩌면 그것은 사물의 "큰 INT"측면과 관련이있다 :
내가이 글을 읽는 것이 좋습니다. JavaScript는 53 비트 정수에만 대처할 수 있습니다. 왜 유니 코드 문자가 큰 것을 필요로하는지 확신 할 수 없지만. – Whothehellisthat
의견을 보내 주셔서 감사합니다. 비록 다른 해결책으로 문제를 해결했지만, 자바 스크립트가 문자를 처리하는 방식 때문에 refrence를 위해이 글을 읽을 것을 권합니다. https://mathiasbynens.be/notes/javascript-unicode – dudu