私はプロジェクトでビット単位の操作をしています。組み込みの型付き配列が頭痛を緩和し、多分パフォーマンスの向上をもたらしてくれるのだろうかと思います。JavaScriptで型付き配列を使用して4倍のUint8をUint32に変換できますか?
let bytes = [128, 129, 130, 131]
let uint32 = (bytes[0] << 24) | (bytes[1] << 16) | (bytes[2] << 8) | bytes[3]
//=> -2138996093
同じ回答を得るために型付き配列を使用できますか?
// not actually working !
let uint8bytes = Uint8Array.from(bytes)
let uint32 = Uint32Array.from(uint8bytes)[0]
//=> ideally i'd get the same value as above: -2138996093
サイド質問:
私はそれが奇妙上記uint32
が負であることがわかった - 明らかではない示唆VARの名前として非常に... 符号なし ...
バイナリオクテットをマッシュアップして解析すると、肯定的な回答が得られます
// 128 129 130 131
let bin = '10000000' + '10000001' + '10000010' + '10000011'
let uint32 = Number.parseInt(bin,2)
console.log(uint32)
// 2155971203
それは私が各外の正しい値を取得するためのプロセスを逆にすることができますが、手順1が負であるが、手順2が正である理由私は理解していない何も驚きではありません。
let a = -2138996093;
let b = 2155971203;
// two's compliment, right?
console.log(a.toString(2)) // -1111111011111100111110101111101
console.log(b.toString(2)) // 10000000100000011000001010000011
console.log(a >> 24 & 255) // 128
console.log(a >> 16 & 255) // 129
console.log(a >> 8 & 255) // 130
console.log(a >> 0 & 255) // 131
console.log(b >> 24 & 255) // 128
console.log(b >> 16 & 255) // 129
console.log(b >> 8 & 255) // 130
console.log(b >> 0 & 255) // 131
UNSIGNED int32から負の数を得ることはできません! –
@ JaromandaX私は*私の質問の途中でコメントしました:\ – naomik
なぜInt32Arrayを試してみませんか? –