And never the twain shall meet without error messages (invalid conversion etc).
Or a simple cast.
Surely they should use the same type
Why? They perform different functions. Though, technically, readBytes() should really have been readChars(), but you can't tell the Arduino team much.
or at least have some (overloading) technique to accept either?
Is a cast too complicated for you?