필자는 UTF-32 (그러나 더 높은 16 비트는 항상 0) 코드 포인트를 보유하는 문자열을 가지고 있습니다. 각 토큰은 긴. 자 열의 각. 자 코드 포인트 4 바이트 중 1입니다. 바이트가 문자열로 바뀌기 전에 부호있는 int로 해석된다는 점에 유의하십시오.JavaScript : 멀티 바이트 문자열 배열을 32 비트 int 배열로 변환하는 방법?
// Provided:
intEncodedBytesString= "0,0,0,-31,0,0,0,-15,0,0,0,-31"; //3 chars: áñá
// Wanted
actualCodePoints = [225,241,225];
intEncodedBytesString을 actualCodePoints 배열로 변환해야합니다. 지금까지 나는이 함께했다 :
var intEncodedBytesStringArray = intEncodedBytesString.toString().split(',');
var i, str = '';
var charAmount = intEncodedBytesStringArray.length/4;
for (i = 0; i < charAmount; i++) {
var codePoint = 0;
for (var j = 0; j < 4; j++) {
var num = parseInt(intEncodedBytesStringArray[i * 4 + j], 10);
if (num != 0) {
if (num < 0) {
num = (1 << (8 * (4 - j))) + num;
}
codePoint += (num << (8 * (3 - j)));
}
}
str += String.fromCodePoint(codePoint);
}
이 일을 더 나은, 간단한 및/또는보다 효율적인 방법이 있나요?
내가 답변 코드 snipets 수십 내 입력 바이트 서명하는 int 문자열에있는 문제를 해결 비슷한 일하지만 아무것도 거래를 보았다 : S
편집 :이 코드는 늘 가장 높은 작업 1 < < 32 이후의 코드 포인트는 2^32가 아니라 1입니다.
사실 T.J.Crowder @, UTF-32. 추가하려면 편집하십시오. – TigerShark