Everything in memory stored as binaries in every language, since it's the only format our RAM can store. But it doesn't means languages should allow print everything in hex by default. In C you can print hex of its char type. In Rust you can't without conversion. Semantics varies over languages like java, python, JS, ruby etc
The only semi-implicit conversion you'll ever see is when calling Into::into and the compiler knows which type it should convert into. You still have to explicitly implement the trait for every conversion and the method call is explicit, too, but once that's done, it's really easy to use and you don't need to specify what type to convert to. It doesn't work for cases, where multiple conversions might be allowed, though, e.g. when working with generic type parameters.
Conceptually, Rust makes a distinction between characters and their encodings, and do not provide implicit conversion between them. Hexadecimal printing logically works on the encoding, not the character itself, so printing a character in hexadecimal requires an explicit conversion.
Rust does provide a limited set of implicit coercions. Moreover, the dot operator invokes auto-dereferencing. However, these implicit conversions are much more limited than what C provides, because of the potential confusion that they may cause.