The problem is in above line. The issue is that String is a collection of 'char' elements, which are signed entities. Therefore, it returns negative value for 0xc3.
There is little that can be done about it, as long as we want to be compatible with
char h[1] = { 0xc3 }
h[0] in any expression would yield a negative value as well.
So this problem is deeply buried in C++ resolution to use signed value for char.
However, fix is trivial:
for (i=0; i<fl; i++)
{
thebyte = (byte)mfileinfo[i];