Using right type for data bytes:
* char:
It is the type that makes up C strings like "abcde"
It also works out as a number value, but it is unspecified whether that value is treated as signed or unsigned. Beware character comparisons through inequalities - although if you limit yourself to ASCII (0-127) you're just about safe.
* signed char:
Gives you at least the -128 to 127 range.
* unsigned char:
Gives you at least the 0 to 255 range.
There is this warning: pointer targets in passing argument 1 of ‘system’ differ in signedness
I guess, it does not hurt me.