     
     /// Returns an `[UInt8]` of the next n-bytes (`quantitiy`) and
     /// increments the reading cursor by n-bytes.
-    mutating func readBytes(quantitiy: Int) throws -> [UInt8] {
+    public mutating func readBytes(quantitiy: Int) throws -> [UInt8] {
         let byteCursor = bitCursor / byteSize
         defer { bitCursor = incrementedCursorBy(bytes: quantitiy) }
         return try getBytes(range: byteCursor..<(byteCursor + quantitiy))
     }
     
     // MARK: - String
-    
-    mutating func readString(quantitiyOfBytes quantitiy: Int, encoding: String.Encoding = .utf8) throws -> String {
+    public mutating func readString(quantitiyOfBytes quantitiy: Int, encoding: String.Encoding = .utf8) throws -> String {
         guard let result = String(bytes: try self.readBytes(quantitiy: quantitiy), encoding: encoding) else {
             throw BinError.notString
         }
         return result
     }
     
-    mutating func getCharacter() throws -> Character {
+    public mutating func getCharacter() throws -> Character {
         return Character(UnicodeScalar(try readByte()))
     }
     
-    mutating func readBool() throws -> Bool {
+    public mutating func readBool() throws -> Bool {
         return try readBit() == 1
     }
 }

    }
    
    /// Sets the reading cursor back to its initial value.
    mutating func resetCursor() {
        self.bitCursor = 0
    }
    
    // MARK: - Bit
    
    /// Returns the binary value `0` or `1` of the given position.
    func getBit(index: Int) throws -> UInt8 {
        guard (0..<(bytesStore.count)).contains(index / byteSize) else {
            throw BinError.outOfBounds
        }

    // MARK: - Byte
    
    /// Returns the `UInt8`-value of the given `index`.
    public func getByte(index: Int) throws -> UInt8 {
        /// Check if `index` is within bounds of `bytes`
        guard (0..<(bytesStore.count)).contains(index) else {
            throw BinError.outOfBounds
