Are these C# and Python code snippets functionally identical?
This section seems wrong:

//The next 2 lines are for parsing the short, equivalent(?) to struct.unpack('h', byte)
i &lt;&lt;= 8;
i += file.ReadByte();


you're shifting the value in i 8 bits left and then reading another byte. I'm guessing because the original code read it in 2 bytes at a time. If your file isn't the right length then this will break it here. what about:

i &lt;&lt;= 8;
int secondByte = file.ReadByte()
if(secondByte != -1)
{
   i += secondByte ;
}


Whats with this? It is casting an int to a byte to a char and it is truncating.

byte b = (byte)i;
char c = (char)b;


so you're better off ignoring the first byte and instead everything after tick = !tick;
could be:

i = file.ReadByte();

char c = (char)(i ^ (key &amp; 255));
builder.Append(c);


In Python chr() will throw an exception if the value is greater than 255 anyway. 

And IMHO it is a bad idea to roll your own encryption/decryption like this. Use a trusted known solution instead.

Question: I only want to know if I have translated the function correctly to C# so it does the same as in Python

Answer Its more of a transliteration rather than a translation but they should give the same output. If I were to re-write the python into c# it would look different as it seems inefficient to me.