簡體   English   中英

如何將數字字節拆分為 Uint8Array

[英]How to split bytes of number into an Uint8Array

我想將一個 js 數字拆分成最小的 uint8array。

例如:

65 535 = Uint8Array<[255,255]> (0b1111111111111111 = [0b11111111, 0b11111111])
12 356 = Uint8Array<[48,68]> (0b0011000001000100 = [0b00110000, 0b01000100])
1 142 =  Uint8Array<[4,118]> (0b0011000001000100 = [0b00000100, 0b01110110])
400 = Uint8Array<[1,144]> (0b0000000110010000 = [0b00000001, 0b10010000])
256 = Uint8Array<[1,0]> (0b0000000100000000 = [0b00000001, 0b00000000])
64 =  Uint8Array<[64]> (0b0000000001000000 = [0b01000000])
-1 = Uint8Array<[]> I don't want to support negative number

我嘗試按字節編輯字節,如下所示:

const buffer : Uint8Array = new Uint8Array([0,0])
buffer[bytePos] &= ~(1<<bitToEdit); //to set at 0
buffer[bytePos] |= (1 <<bitToEdit) //to set at 1

字節編輯工作,但我不知道如何從數字中讀取字節以及如何將數字字節推送到該數組中。

您可以使用BigInt 、模數 ( % ) 和Uint8Array.from來做到這一點。

對於負數和0 ,此實現返回一個空的 Uint8Array(零元素)。 此實現通過反轉字節數組以 Big Endian 輸出(如您的示例所示)。

 function toByteArray(n) { let b = BigInt(n); let result = []; while (b > 0n) { result.push(Number(b % 0x100n)); b /= 0x100n; } return Uint8Array.from(result.reverse()); } console.log(toByteArray( 0x01_00_00_00_00_00_00_00_03n )) // Uint8Array(9) [ 1, 0, 0, 0, 0, 0, 0, 0, 3 ]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM