serial.write(0x00); gives an error

"0" is magic because it is also the value of a null pointer.

note: candidates are: virtual size_t SoftwareSerial::write(uint8_t)
note: size_t Print::write(const char*)

The actual complaint from the compiler is that it can't tell an int (uint8_t) from a null pointer (const char ), not that it can't tell an int from a char.
I think this was/is because C compiler geeks are lazy and didn't want to write ((char
)0) around all the null pointers they were passing around. Proper usage would be: Serial.write((uint8_t) 0);
(please don't use "byte"; it's a terribly overloaded term that is being removed from all sorts of official libraries!)