https://github.com/pdgendt/cobs
A Golang implementation for COBS
https://github.com/pdgendt/cobs
cobs golang
Last synced: 9 months ago
JSON representation
A Golang implementation for COBS
- Host: GitHub
- URL: https://github.com/pdgendt/cobs
- Owner: pdgendt
- License: mit
- Created: 2024-05-15T14:07:04.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2025-04-08T09:07:10.000Z (9 months ago)
- Last Synced: 2025-04-08T10:22:55.137Z (9 months ago)
- Topics: cobs, golang
- Language: Go
- Homepage: https://pkg.go.dev/github.com/pdgendt/cobs
- Size: 21.5 KB
- Stars: 4
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# COBS
A Golang module for the
[Consistent Overhead Byte Stuffing (COBS)](https://en.wikipedia.org/wiki/Consistent_Overhead_Byte_Stuffing)
algorithm.
## Usage
This module provides both simple helper functions to Encode/Decode `[]byte` arrays and
Encoder/Decoder structs to stream bytes to an `io.Writer` instance.
### `Encode`/`Decode` functions
The helper functions will allocate buffers to hold the encoded/decoded data and return a `[]byte`
slice or an error.
The following example encodes a string with embedded zeroes:
```go
package main
import (
"os"
"github.com/pdgendt/cobs"
)
func main() {
enc, _ := cobs.Encode([]byte{'H', 'e', 'l', 'l', 'o', 0x00, 'w', 'o', 'r', 'l', 'd', '!'})
os.Stdout.write(enc)
}
```
### `Encoder`/`Decoder` structs
The structs require an `io.Writer` instance on creation. As soon as data is available it is written,
for the `Encoder` this is done for each group, with a maximum of 255 bytes, for the `Decoder` every
`byte` is written individually.
The structs implement the `io.Writer` interface to allow chaining.
The following example encodes bytes read from `os.Stdin` and writes them to `os.Stdout`:
```go
package main
import (
"io"
"os"
"github.com/pdgendt/cobs"
)
func main() {
enc := cobs.NewEncoder(os.Stdout)
if _, err := io.Copy(enc, os.Stdin); err != nil {
panic(err)
}
// Close needs to be called to flush the last group
if err := enc.Close(); err != nil {
panic(err)
}
}
```
## CLI tools
The [cmd/](cmd/) directory contains simple encode/decode command line tools that take in data
from `stdin` and writes it to `stdout`.
This can be used to pipe encoded/decoded data to other processes.
```shell
$ echo "Hello world" | go run cmd/encode/main.go | go run cmd/decode/main.go
Hello world
```