JavaScript/TypeScript library to manipulate bits, nibbles, bytes, and buffers.
importbitwisefrom'bitwise'constbits=bitwise.byte.read(42)// [0, 0, 1, 0, 1, 0, 1, 0]bitwise.bits.toString(bits,4)// '0010 1010'bitwise.byte.write(bits)// 42bitwise.bits.and([0,0,1,1],[0,1,0,1])// [0, 0, 0, 1]bitwise.bits.xor([0,0,1,1],[0,1,0,1])// [0, 1, 1, 0]// cherry-pick parts of bitwiseimportbytefrom'bitwise/byte'byte.read(42)// [0, 0, 1, 0, 1, 0, 1, 0]yarn add bitwise
or
npm i bitwise
- bits
- operations (and, circularShiftLeft, circularShiftRight, nand, nor, not, or, xnor, xor)
- reduce operations (reduceAnd, reduceNand, reduceNor, reduceOr, reduceXnor, reduceXor)
- toString
- buffer
- byte
- integer
- nibble
- string
// cherry-pickimportandfrom'bitwise/bits/and'importbitsfrom'bitwise/bits'importtoStringfrom'bitwise/bits/to-string'(bits1: Array<0|1>,bits2: Array<0|1>): Array<0|1>Applies the bitwise AND operation, expects two arrays of the same size and returns a new one.
bitwise.bits.and([1,0,0,0,1,1,0,1],[0,1,1,0,0,1,0,0])// [0, 0, 0, 0, 0, 1, 0, 0](bits: Array<0|1>,amount: number): Array<0|1>Applies the bitwise ROL operation, expects two arrays of the same size and a shift amount and returns a new one.
bitwise.bits.circularShiftLeft([0,0,0,1,1,1,1,1],1)// [0, 0, 1, 1, 1, 1, 1, 0](bits: Array<0|1>,amount: number): Array<0|1>Applies the bitwise ROR operation, expects two arrays of the same size and a shift amount and returns a new one.
bitwise.bits.circularShiftRight([0,0,0,1,1,1,1,1],1)// [1, 0, 0, 0, 1, 1, 1, 1](bits1: Array<0|1>,bits2: Array<0|1>): Array<0|1>Applies the bitwise NAND operation, expects two arrays of the same size and returns a new one.
bitwise.bits.nand([1,0,0,0,1,1,0,1],[0,1,1,0,0,1,0,0])// [1, 1, 1, 0, 1, 0, 0, 1](bits1: Array<0|1>,bits2: Array<0|1>): Array<0|1>Applies the bitwise NOR operation, expects two arrays of the same size and returns a new one.
bitwise.bits.nor([1,0,0,0,1,1,0,1],[0,1,1,0,0,1,0,0])// [1, 1, 1, 0, 1, 0, 0, 1](bits: Array<0|1>): Array<0|1>Flips all given bits and returns the flipped bits.
bitwise.bits.not([1,0,1,1,0,1])// [0, 1, 0, 0, 1, 0](bits1: Array<0|1>,bits2: Array<0|1>): Array<0|1>Applies the bitwise OR operation, expects two arrays of the same size and returns a new one.
bitwise.bits.or([1,0,0,0,1,1,0,1],[0,1,1,0,0,1,0,0])// [1, 1, 1, 0, 1, 1, 0, 1](bits1: Array<0|1>,bits2: Array<0|1>): Array<0|1>Applies the bitwise exclusive NOR operation, expects two arrays of the same size and returns a new one.
bitwise.bits.xnor([1,0,0,0,1,1,0,1],[0,1,1,0,0,1,0,0])// [1, 1, 1, 0, 1, 0, 0, 1](bits1: Array<0|1>,bits2: Array<0|1>): Array<0|1>Applies the bitwise exclusive OR operation, expects two arrays of the same size and returns a new one.
bitwise.bits.xor([1,0,0,0,1,1,0,1],[0,1,1,0,0,1,0,0])// [1, 1, 1, 0, 1, 0, 0, 1](bits: Array<0|1>): 0|1Applies the bitwise AND operation on the given bits. Returns one bit. Throws if less than 2 bits are given.
bitwise.bits.reduceAnd([1,0,0,0,1,1,0,1])// 0(bits: Array<0|1>): 0|1Applies the NAND operation on the given bits. Returns one bit. Throws if less than 2 bits are given.
bitwise.bits.reduceNand([1,0,0,0,1,1,0,1])// 0(bits: Array<0|1>): 0|1Applies the NOR operation on the given bits. Returns one bit. Throws if less than 2 bits are given.
bitwise.bits.reduceNor([1,0,0,0,1,1,0,1])// 0(bits: Array<0|1>): 0|1Applies the OR operation on the given bits. Returns one bit.
Throws if less than 2 bits are given.
bitwise.bits.reduceOr([1,0,0,0,1,1,0,1])// 1(bits: Array<0|1>): 0|1Applies the XNOR operation on the given bits. Returns one bit. Throws if less than 2 bits are given.
bitwise.bits.reduceXnor([1,0,0,0,1,1,0,1])// 1(bits: Array<0|1>): 0|1Applies the XOR operation on the given bits. Returns one bit.
Throws if less than 2 bits are given.
bitwise.bits.reduceXor([1,0,0,0,1,1,0,1])// 0(bits: Array<0|1>): Array<boolean>Converts a bit array to a boolean array.
bitwise.bits.toBoolean([0,1])// [false, true](bits: Array<0|1>,spacing: number=0,spacer: string=' '): stringConverts a bit Array to a String. If defined, inserts spacer every spacing characters, but never inserts it as the last substring.
bitwise.bits.toString([1,0,1,0,1,0],2,'_')// '10_10_10'// cherry-pickimportandfrom'bitwise/buffer/and'importbufferfrom'bitwise/buffer'importcreatefrom'bitwise/buffer/create'(bits: Array<0|1>): BufferCreates a new buffer and writes the given bits.
constbuffer=bitwise.buffer.create([1,1,1,1,0,0,0,1,1,0,1,0])// Buffer(1111 0001 1010 0000)(buffer: Buffer,newBits: Array<0|1>,bitOffset: number=0): voidModifies the buffer's bits to equal newBits starting at bitOffset.
constbuffer=Buffer.from('A43A','hex')bitwise.buffer.modify(buffer,[0,0,0,1,0,0,1],3)// Buffer(1010 1001 0011 1010)(buffer1: Buffer,buffer2: Buffer,isLooping=false): BufferApplies a bitwise AND with buffer2 to every value in buffer1. Returns a new buffer. If isLooping is set, buffer1 may be read multiple times in case it's shorter than buffer2.
bitwise.buffer.and(buffer1,buffer2,false)// Buffer(buffer1 AND buffer2)(buffer1: Buffer,buffer2: Buffer,isLooping=false): BufferApplies a bitwise NAND with buffer2 to every value in buffer1. Returns a new buffer. If isLooping is set, buffer1 may be read multiple times in case it's shorter than buffer2.
bitwise.buffer.nand(buffer1,buffer2,false)// Buffer(buffer1 NAND buffer2)(buffer1: Buffer,buffer2: Buffer,isLooping=false): BufferApplies a bitwise NOR with buffer2 to every value in buffer1. Returns a new buffer. If isLooping is set, buffer1 may be read multiple times in case it's shorter than buffer2.
bitwise.buffer.nor(buffer1,buffer2,false)// Buffer(buffer1 NOR buffer2)(buffer: Buffer): BufferFlips all bits in the given buffer.
bitwise.buffer.not(buffer,false)// Buffer(NOT buffer)(buffer1: Buffer,buffer2: Buffer,isLooping=false): BufferApplies a bitwise OR with buffer2 to every value in buffer1. Returns a new buffer. If isLooping is set, buffer1 may be read multiple times in case it's shorter than buffer2.
bitwise.buffer.or(buffer1,buffer2,false)// Buffer(buffer1 OR buffer2)(buffer1: Buffer,buffer2: Buffer,isLooping=false): BufferApplies a bitwise XNOR with buffer2 to every value in buffer1. Returns a new buffer. If isLooping is set, buffer1 may be read multiple times in case it's shorter than buffer2.
bitwise.buffer.xnor(buffer1,buffer2,false)// Buffer(buffer1 XNOR buffer2)(buffer1: Buffer,buffer2: Buffer,isLooping=false): BufferApplies a bitwise XOR with buffer2 to every value in buffer1. Returns a new buffer. If isLooping is set, buffer1 may be read multiple times in case it's shorter than buffer2.
bitwise.buffer.xor(buffer1,buffer2,false)// Buffer(buffer1 XOR buffer2)(buffer: Buffer,bitOffset: number=0,bitLength?: number): Array<0|1>Returns an Array containing bitLength bits starting at bitOffset. If no bitLength is given, it's assumed to be the rest of the buffer.
constbuffer=Buffer.from('ED743E17','hex')bitwise.buffer.read(buffer,12)// [0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1](buffer: Buffer,bitOffset: number=0,bitLength: number=8): numberConverts a section of a buffer to a signed integer.
// buffer 11110110bitwise.buffer.readInt(buffer,3,5)// -10(buffer: Buffer,bitOffset: number=0,bitLength: number=8): numberConverts a section of a buffer to an unsigned integer.
// buffer 11110110bitwise.buffer.readUInt(buffer,3,5)// 22// cherry-pickimportbytefrom'bitwise/byte'importreadfrom'bitwise/byte/read'(byte: UInt8): Array<0|1>Returns an Array of length 8 containing the read bits.
bitwise.byte.read(42)// [0, 0, 1, 0, 1, 0, 1, 0]bitwise.byte.read(256)// RangeError('invalid size')(bits: Array<0|1>): UInt8Returns a Byte (0-255) which represents the given bits.
bitwise.byte.write([0,0,1,0,1,0,1,0])// 42bitwise.byte.write([0,0,1,0,1,0,1,0,0])// RangeError('invalid array length')// cherry-pickimportintegerfrom'bitwise/integer'(number: number,position: number): 0|1Gets the value of a specific bit.
bitwise.integer.getBit(128,7)// 1(number: number,position: number,value: 0|1): Array<0|1>Sets the value of a specific bit.
bitwise.integer.setBit(128,7,0)// 0(number: number,position: number): Array<0|1>Toggles the value of a specific bit.
bitwise.integer.toggleBit(128,7)// 0// cherry-pickimportnibblefrom'bitwise/nibble'importreadfrom'bitwise/nibble/read'(nibble: UInt4): Array<0|1>Returns an Array of length 4 containing the read bits.
bitwise.nibble.read(15)// [1, 1, 1, 1]bitwise.nibble.read(42)// RangeError('invalid size')(nibble: [<0|1>,<0|1>,<0|1>,<0|1>]): UInt4Returns a Nibble (0-15) which represents the given bits.
bitwise.nibble.write([0,0,1,0])// 2bitwise.nibble.write([0,0,1,0,1])// RangeError('invalid array length')// cherry-pickimportstringfrom'bitwise/string'importtoBitsfrom'bitwise/string/to-bits'(string: string): Array<0|1>Converts a string into an array of bits. Ignores all characters except 1 and 0.
bitwise.string.toBits('10 10 12$%_.0')// [1, 0, 1, 0, 1, 0]- Add
bits.circularShiftLeft(#44 / #49) via @0xflotus - Add
bits.circularShiftRight(#44 / #49) via @0xflotus
- Add Support for Tree Shaking
- Readme/package.json updates
- refactor to typescript
- remove
bitwise.buffer.readCInt()
- improve
require()support
- add
bits.toBoolean
- add
bits.reduceAnd - add
bits.reduceNand - add
bits.reduceNor - add
bits.reduceOr - add
bits.reduceXnor - add
bits.reduceXor
- split up
buffer.operations
- split up
bits.operations
- add
integer.getBit - add
integer.setBit - add
integer.toggleBit
- rewrite in ES6
- improve utilization of bitwise operators
- improve API (breaking change)
- Added buffer bitwise operations
- Added nor, xnor, nand
- Fixed bitwise operations modifying original array
- Re-ordered the arguments in readInt, readCInt, readUInt
- Added not, and, or, xor
- Renamed flipBits to not