Created
March 23, 2012 00:23
-
-
Save schell/2165795 to your computer and use it in GitHub Desktop.
How to store 8 7bit ascii characters in 7 8bit slots... (expanded)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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