Skip to content

Instantly share code, notes, and snippets.

@Langerz82
Last active December 1, 2021 21:43
Show Gist options
  • Save Langerz82/7834d498a030318ef05f4a820e65db20 to your computer and use it in GitHub Desktop.
Save Langerz82/7834d498a030318ef05f4a820e65db20 to your computer and use it in GitHub Desktop.
Uint Binary array to Hex and back again.
function reverse(s){
return s.split("").reverse().join("");
}
function BinToHex(uint8array) {
var len = Math.ceil(uint8array.length/8);
var tmpArr = new Uint32Array(len);
for (var i=0; i < tmpArr.length; ++i) {
for (var j=0; j < 8; ++j) {
tmpArr[i] += (uint8array[i*8+j] << j);
}
}
var buffBin = Buffer.from(tmpArr, 'binary');
var hex = buffBin.toString('hex');
//console.log("hex: "+hex);
return hex;
};
function HexToBin(hex, origLen) {
var len = hex.length;
var tmpArr = new Array(len);
var bitArr = new Uint32Array(len*4);
// Reverse the 4-bit pattern.
for (var i=0; i < len; ++i) {
tmpArr[i] = parseInt(hex[i], 16).toString(2).padStart(4, '0');
tmpArr[i] = reverse(tmpArr[i]);
}
// Flip the hex pairs.
for (var i=0; i < len; i+=2) {
var tmp = tmpArr[i];
tmpArr[i] = tmpArr[i+1];
tmpArr[i+1] = tmp;
}
// Stuff into byte array.
for (var i=0; i < len; ++i) {
for (var j=0; j < 4;++j) {
bitArr[i*4+j] = tmpArr[i][j];
}
}
// Chop excess zero's.
if (origLen)
bitArr = bitArr.slice(0,origLen);
//console.log("tmpArr: "+JSON.stringify(tmpArr));
//console.log("bitArr: "+JSON.stringify(bitArr));
return bitArr;
}
var test = new Uint8Array([1,0,1,1,0,0,0,1,1,0,1,1,1,0,1]);
console.log("Test:"+test);
var hex = BinToHex(test);
console.log("BinToHex="+hex);
var bin = HexToBin(hex, test.length);
console.log("HexToBin="+bin);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment