簡體   English   中英

當從每個字節中忽略前導位時,是否有一種簡便的方法可以從一組字節中產生一個數字?

[英]Is there an easy way to produce a number from a set of bytes when leading bits are ignored from each byte?

我正在嘗試使用ArrayBuffer中的 JavaScript用ArrayBuffer從一組字節中生成一個數字,以獲取MP3標簽信息。 ID3v2規范指出 ,要獲取標簽大小,您必須在特定位置獲取4個字節並從中獲取整數值,但以下情況除外:

ID3v2標簽大小用四個字節編碼,其中最高有效位(第7位)在每個字節中均設置為零,總共28位。 零位將被忽略,因此257字節長的標記表示為$ 00 00 02 01。

最簡單的方法似乎是遍歷每個字節並獲取每個位的值,並產生一個新的4字節值,該值是從原始4個字節的7位產生的,例如說我們有這4個原始字節:

0111 1111 0111 1111 0111 1111 0111 1111

我創建一個新的ArrayBuffer並遍歷每個位以產生:

0000 1111 1111 1111 1111 1111 1111 1111

然后我使用Uint32Array從這個32位整數計算整數值

有沒有更簡單的方法可以做到這一點?

如果您考慮一下,您將獲得一個4位數的128進制數字。 每個字節都保存一個“數字”,每個“數字”是一個介於0到127(含)之間的值。 因此,要將它們轉換為可用的數字,只需像對其他任何基數一樣乘以並加法:最低有效的“數字”是“某人的位置”數字,下一個是“ 128”,接下來是“ 16384s”,最高位是“ 2097152s”。

我不確定確切如何在代碼中顯示此內容,因為我不太熟悉新的“ ArrayBuffer” API。 您使用“ ArrayBufferView”或其他訪問值的方法,對嗎? 假設容易獲得單個字節,那么執行乘法和加法應該是一個非常簡單的函數。

如果您僅以Chrome為目標,則還可以使用DataViews讀取字節流的不同數據類型: https : //developer.mozilla.org/en/JavaScript_typed_arrays/DataView

暫無
暫無

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

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