UNPKG

@8kb/bit.io

Version:

`bit.io` is a js/ts library for reading individual bits from an `ArrayBuffer`.

41 lines (35 loc) 959 B
export const divide = (divident: number, divisor: number) => { const remainder = divident % divisor return [ (divident - remainder) / divisor, remainder, ] } export type I_bit = 1 | 0 export const read_bit = (ab: ArrayBuffer) => { const ua = new Uint8Array(ab) const bit_length = ab.byteLength * 8 return (index: number): I_bit | 'out of range' | 'invalid index' => { if (index < 0 || index >= bit_length) return 'out of range' if (!Number.isInteger(index)) return 'invalid index' const [byte_index, bit_index] = divide(index, 8) const byte = ua[byte_index] let result = byte << bit_index result &= 255 return result >> 7 as 1 | 0 } } export const read_bits = (ab: ArrayBuffer) => { const bit_length = ab.byteLength * 8 const read_bit_by_index = read_bit(ab) const result: I_bit[] = [] for (let i=0; i<bit_length; i++) result.push(read_bit_by_index(i) as I_bit) return result }