Das ist kein Problem, denn verglichen wird hier ja nur das Zeichen das in der Ascii-Tabelle an der Stelle "0" steht - was dem Steuerzeichen "NUL" entspricht.
Die "0" als Zeichen wird also nicht als "0" gesendet, sondern als Byte mit Wert "48" (vgl. Ascii-Tabelle).

Deshalb wandelt man die eingehenden Byte-Werte auch mit dem Befehl chr(InByte) wieder in die eigentlichen Zeichen um, bevor man sie an den String anfügt.