diff --git a/src/anybase.rs b/src/anybase.rs
index ea839c3..156ef09 100644
--- a/src/anybase.rs
+++ b/src/anybase.rs
@@ -91,10 +91,10 @@ pub mod bytes {
     /// Encodes from bytes into catspeak
     ///
     /// ```
-    /// use cat2text::{anybase::bytes::encode, core::char_length};
+    /// use cat2text::{anybase::bytes::encode, core::bytes::char_length};
     ///
-    /// let bytes = &[9, 1];
-    /// let base = 10;
+    /// let bytes = &[243];
+    /// let base = 16;
     /// let char_length = char_length(base);
     ///
     /// assert_eq!("meow mewo meow mrrp", encode(bytes, base, char_length));
@@ -114,9 +114,9 @@ pub mod bytes {
     /// Decodes catspeak into bytes
     ///
     /// ```
-    /// use cat2text::{anybase::bytes::decode, core::char_length};
+    /// use cat2text::{anybase::bytes::decode, core::bytes::char_length};
     ///
-    /// let text = "mreow mrrp meow mrrp".to_string();
+    /// let text = "mrrp nyaaaa~ meow".to_string();
     /// let base = 10;
     /// let char_length = char_length(base);
     ///
diff --git a/src/base4.rs b/src/base4.rs
index a4f66f5..6e0073d 100644
--- a/src/base4.rs
+++ b/src/base4.rs
@@ -9,11 +9,6 @@ pub fn alphabet() -> Vec<String> {
     return tmp;
 }
 
-/// How many words long an english character is when translated to catspeak
-pub fn char_length() -> u32 {
-    return 3;
-}
-
 /// Encodes english text into base 4 catspeak
 ///
 /// ```
@@ -22,7 +17,7 @@ pub fn char_length() -> u32 {
 /// assert_eq!("meow mreow mrrp; meow mrow meow meow mrow mrow mrrp mrrp mreow meow mrrp mrrp; meow meow mrow meow meow mrrp mrrp mrrp meow mrrp meow mrow", encode("i love cats".to_string()))
 /// ```
 pub fn encode(text: impl AsRef<str>) -> String {
-    return anybase::encode(text.as_ref().to_string(), 4, char_length());
+    return anybase::encode(text.as_ref().to_string(), 4, core::char_length(4));
 }
 
 /// Decodes base 4 catspeak to english text
@@ -33,22 +28,22 @@ pub fn encode(text: impl AsRef<str>) -> String {
 /// assert_eq!("i love cats", decode("meow mreow mrrp; meow mrow meow meow mrow mrow mrrp mrrp mreow meow mrrp mrrp; meow meow mrow meow meow mrrp mrrp mrrp meow mrrp meow mrow".to_string()));
 /// ```
 pub fn decode(text: String) -> String {
-    return anybase::decode(text, 4, char_length());
+    return anybase::decode(text, 4, core::char_length(4));
 }
 
 pub mod bytes {
     //! This handles encoding and decoding bytes to/from catspeak
-    use super::char_length;
     use crate::anybase;
+    use crate::core::bytes::char_length;
     /// Encodes from bytes into catspeak
     ///
     /// ```
     /// use cat2text::base4::bytes::encode;
     ///
-    /// assert_eq!("meow mreow mrrp meow meow mrrp", encode(&[9, 1]));
+    /// assert_eq!("meow mreow mrrp meow meow mrrp", encode(&[253..., 1]));
     /// ```
     pub fn encode(bytes: impl AsRef<[u8]>) -> String {
-        anybase::bytes::encode(bytes, 4, char_length())
+        anybase::bytes::encode(bytes, 4, char_length(4))
     }
 
     /// Decodes catspeak into bytes
@@ -59,6 +54,6 @@ pub mod bytes {
     /// assert_eq!(vec![9, 1], decode("meow mreow mrrp meow meow mrrp".to_string()));
     /// ```
     pub fn decode(text: String) -> Vec<u8> {
-        anybase::bytes::decode(text, 4, char_length())
+        anybase::bytes::decode(text, 4, char_length(4))
     }
 }
diff --git a/src/core.rs b/src/core.rs
index 113a1b0..646056b 100644
--- a/src/core.rs
+++ b/src/core.rs
@@ -135,3 +135,23 @@ pub fn char_length(base: u32) -> u32 {
     }
     return u32::MAX;
 }
+
+pub mod bytes {
+    /// Returns the minimum catspeak words per character needed for this base for bytes
+    ///
+    /// ```
+    /// use cat2text::core::bytes::char_length;
+    ///
+    /// let base = 16;
+    /// assert_eq!(char_length(base), 2)
+    /// ```
+    pub fn char_length(base: u32) -> u32 {
+        for i in 1..base + 1 {
+            let num = base.pow(i);
+            if num > 255 {
+                return i;
+            }
+        }
+        return u32::MAX;
+    }
+}