What is the difference between a Byte and a unsigned Char?
By and large no difference. Some subtleties may arise if you are doing object oriented stuff and calling a method on an object which has overloads for both but... Beyond that nothing comes to mind.
typedef uint8_t byte;
Personally I prefer to just use uint8_t.