uudecode
public static byte[] uuDecode(string sBuffer)
{
// Create an output array
byte[] outBuffer = new byte[(sBuffer.Length-1)/4*3];
int outIdx = 0;
// Get the string as an array of ASCII bytes
byte[] asciiBytes = Encoding.ASCII.GetBytes(sBuffer);
for (int i=0; i<asciiBytes.Length; i++)
asciiBytes[i] = (byte)((asciiBytes[i]-0x20) & 0x3f);
// Convert each block fo 4 input bytes into 3
// output bytes
for (int i = 1; i <= (asciiBytes.Length-1); i += 4)
{
outBuffer[outIdx++] = (byte)(asciiBytes[i] << 2 | asciiBytes[i+1] >> 4);
outBuffer[outIdx++] = (byte)(asciiBytes[i+1] << 4 | asciiBytes[i+2] >> 2);
outBuffer[outIdx++] = (byte)(asciiBytes[i+2] << 6 | asciiBytes[i+3]);
}
return outBuffer;
}
There you go; next time you're writing a Usenet news reader, you'll have somewhere to copy the uudecode function from.
Source code looks so much better in colour doesn't it?
(This is a fixed version of the source; thanks to Esa Leskinen for pointing out that my previous version was incomplete).