프로젝트에서 약간의 비트 조작을하고 있습니다. 내장형 입력 배열이 나에게 두통을 덜어주고 성능 향상을 조금 줄 수 있을지 궁금합니다.4x Uint8을 JavaScript의 입력 배열을 사용하여 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에의 이름에서 알 수 있듯이 ...
2 진수 옥텟을 매시하고 구문 분석하면 무료 긍정 응답
가 표시됩니다.// 128 129 130 131
let bin = '10000000' + '10000001' + '10000010' + '10000011'
let uint32 = Number.parseInt(bin,2)
console.log(uint32)
// 2155971203
내가 각 중 올바른 값을 얻을 수있는 과정을 되돌릴 수 놀랄 일이 아니다, 그러나 절차 (1)이 음수하지만 과정이 긍정적 인 이유를 이해하지 않습니다.
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를 사용해 보지 않으시겠습니까? –