Skip to content

Instantly share code, notes, and snippets.

@schell
Created March 23, 2012 00:23
Show Gist options
  • Save schell/2165795 to your computer and use it in GitHub Desktop.
Save schell/2165795 to your computer and use it in GitHub Desktop.
How to store 8 7bit ascii characters in 7 8bit slots... (expanded)
var inputData = [];
var input = 'hi ther';
// Here we will store 8 7bit characters in 7 8bit slots...
inputData[0] = input.charCodeAt(0) & ((1 << 7) - 1);
inputData[0] = inputData[0] << 1 | input.charCodeAt(1) >> 6;
inputData[1] = input.charCodeAt(1) & ((1 << 6) - 1);
inputData[1] = inputData[1] << 2 | input.charCodeAt(2) >> 5;
inputData[2] = input.charCodeAt(2) & ((1 << 5) - 1);
inputData[2] = inputData[2] << 3 | input.charCodeAt(3) >> 4;
inputData[3] = input.charCodeAt(3) & ((1 << 4) - 1);
inputData[3] = inputData[3] << 4 | input.charCodeAt(4) >> 3;
inputData[4] = input.charCodeAt(4) & ((1 << 3) - 1);
inputData[4] = inputData[4] << 5 | input.charCodeAt(5) >> 2;
inputData[5] = input.charCodeAt(5) & ((1 << 2) - 1);
inputData[5] = inputData[5] << 6 | input.charCodeAt(6) >> 1;
inputData[6] = input.charCodeAt(6) & ((1 << 1) - 1);
inputData[6] = inputData[6] << 7 | input.charCodeAt(7) >> 0;
// Now to get them out...
var outputData = [];
outputData[0] = inputData[0] >> 1;
outputData[1] = inputData[0] & ((1 << 1) - 1);
outputData[1] = outputData[1] << 6 | inputData[1] >> 2;
outputData[2] = inputData[1] & ((1 << 2) - 1);
outputData[2] = outputData[2] << 5 | inputData[2] >> 3;
outputData[3] = inputData[2] & ((1 << 3) - 1);
outputData[3] = outputData[3] << 4 | inputData[3] >> 4;
outputData[4] = inputData[3] & ((1 << 4) - 1);
outputData[4] = outputData[4] << 3 | inputData[4] >> 5;
outputData[5] = inputData[4] & ((1 << 5) - 1);
outputData[5] = outputData[5] << 2 | inputData[5] >> 6;
outputData[6] = inputData[5] & ((1 << 6) - 1);
outputData[6] = outputData[6] << 1 | inputData[6] >> 7;
outputData[7] = inputData[6] & ((1 << 7) - 1);
var output = outputData.map(function(el) {
return String.fromCharCode(el);
}).join('');
console.log(output);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment