javascript-binary-converter
Version:
A utility package to quickly handle and convert various Javascript binary objects
77 lines • 3.15 kB
JavaScript
import { binaryToInteger } from "../utils/binary";
import { integerToHexaDecimal } from "../utils/hex";
import { padString } from "../utils/string";
import { typedArrayToIntegers } from "../utils/typedArray";
import { BaseBytesConverter } from "./BaseBytesConverter";
export default class BytesConverter extends BaseBytesConverter {
constructor(original) {
super(original);
this.original = original;
this.original = this.original.map(byte => padString(byte)); //Make sure every byte has 8 bits, even if it's not mathematically needed
}
_getIntegers(isSigned = false) {
return this.original.map(binary => binaryToInteger(binary, isSigned));
}
toUint8Array() {
return new Uint8Array(this._getIntegers());
}
toInt8Array() {
return new Int8Array(this._getIntegers(true));
}
toUint16Array() {
const integers = this._getIntegers(false);
return new Uint16Array(new Uint8Array(integers).buffer);
}
toInt16Array() {
const integers = this._getIntegers(true);
return new Int16Array(new Int8Array(integers).buffer);
}
toUint32Array() {
const integers = this._getIntegers(false);
return new Uint32Array(new Uint8Array(integers).buffer);
}
toInt32Array() {
const integers = this._getIntegers(true);
return new Int32Array(new Int8Array(integers).buffer);
}
toBigInt64Array() {
const integers = this._getIntegers(true);
const bigintArray = new BigInt64Array(new Int8Array(integers).buffer);
return bigintArray;
}
toBigUint64Array() {
const integers = this._getIntegers(true); //
const bigintArray = new BigUint64Array(new Uint8Array(integers).buffer);
return bigintArray;
}
toFloat32Array() {
const int32Array = this.toInt32Array();
const float32Array = new Float32Array(int32Array.buffer);
return float32Array;
}
/**
* Defaults: isSigned = false, integerSize = 8
*/
toIntegers({ isSigned = false, integerSize = 8 } = {}) {
let typedArray;
switch (integerSize) {
case 8:
return this.original.map(binary => binaryToInteger(binary, isSigned));
case 16:
typedArray = isSigned ? this.toInt16Array() : this.toUint16Array();
return typedArrayToIntegers(typedArray);
case 32:
typedArray = isSigned ? this.toInt32Array() : this.toUint32Array();
return typedArrayToIntegers(typedArray);
case 64:
typedArray = isSigned ? this.toBigInt64Array() : this.toBigUint64Array();
return typedArrayToIntegers(typedArray);
default:
throw new Error('The integer size is invalid(8,16,32,64 are allowed)');
}
}
toHexString({ isSigned = false } = {}) {
return this.original.map((int) => integerToHexaDecimal(binaryToInteger(int, isSigned)));
}
}
//# sourceMappingURL=BytesConverter.js.map