私はUTF-32を保持する文字列を持っていますが(おそらく上位16ビットは常に0になります)、コードポイントです。各トークンは、長い文字列の各文字のコードポイントの4バイトのうちの1つです。 文字列に変換する前に、バイトが符号付き整数として解釈されることに注意してください。JavaScript:マルチバイト文字列配列を32ビット整数配列に変換するにはどうすればよいですか?
// 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);
}
これを行うには、より良い、より単純なおよび/またはより効率的な方法はありますか?
私は私の入力バイトが署名したint型の列にある問題に対処する同様のことが、何に対処するための答えとコードsnipetsの数十を見てきました:S
編集:このコードは文句を言わない最高と連携1 < < 32は1であり2^32ではないので、コードポイント
、UTF-32。それを追加するように編集しました。 – TigerShark