Use \0 for the zero char
diff --git a/src/lit.rs b/src/lit.rs
index c4860bc..34cd341 100644
--- a/src/lit.rs
+++ b/src/lit.rs
@@ -390,7 +390,11 @@
                 Lit::ByteStr(ref v, StrStyle::Cooked) => {
                     let mut escaped = "b\"".to_string();
                     for &ch in v.iter() {
-                        escaped.extend(ascii::escape_default(ch).map(|c| c as char));
+                        match ch {
+                            0 => escaped.push_str(r"\0"),
+                            b'\'' => escaped.push('\''),
+                            _ => escaped.extend(ascii::escape_default(ch).map(|c| c as char)),
+                        }
                     }
                     escaped.push('"');
                     tokens.append(&escaped);
@@ -400,7 +404,18 @@
                         delim = iter::repeat("#").take(n).collect::<String>(),
                         string = str::from_utf8(vec).unwrap()));
                 }
-                Lit::Byte(b) => tokens.append(&format!("b{:?}", b as char)),
+                Lit::Byte(b) => {
+                    match b {
+                        0 => tokens.append(r"b'\0'"),
+                        b'\"' => tokens.append("b'\"'"),
+                        _ => {
+                            let mut escaped = "b'".to_string();
+                            escaped.extend(ascii::escape_default(b).map(|c| c as char));
+                            escaped.push('\'');
+                            tokens.append(&escaped);
+                        }
+                    }
+                }
                 Lit::Char(ch) => ch.to_tokens(tokens),
                 Lit::Int(value, ty) => tokens.append(&format!("{}{}", value, ty)),
                 Lit::Float(ref value, ty) => tokens.append(&format!("{}{}", value, ty)),