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)),
diff --git a/tests/cases/lit.rs b/tests/cases/lit.rs
index 1f90e3f..b9e43ea 100644
--- a/tests/cases/lit.rs
+++ b/tests/cases/lit.rs
@@ -2,22 +2,36 @@
     // Str
     ""
     "0"
+    "\0"
     "\n"
+    "\""
+    "'"
     r"\n"
+    r"'"
 
     // ByteStr
     b""
     b"0"
+    b"\0"
     b"\n"
+    b"\""
+    b"'"
     br"\n"
+    br"'"
 
     // Byte
     b'0'
+    b'\0'
     b'\n'
+    b'"'
+    b'\''
 
     // Char
     '0'
+    '\0'
     '\n'
+    '"'
+    '\''
 
     // Int
     0