aboutsummaryrefslogtreecommitdiffstats
path: root/encoding.go
diff options
context:
space:
mode:
authorobscuren <obscuren@obscura.com>2013-12-30 06:50:43 +0800
committerobscuren <obscuren@obscura.com>2013-12-30 06:50:43 +0800
commit74bc45116aa1c5d0e549f522dccefc58356c1410 (patch)
treeb1a26b5b02170fad1146a610bcab4ee136def502 /encoding.go
parenta1c5d5acac542ab877aeec7814338e7638d55dbf (diff)
downloaddexon-74bc45116aa1c5d0e549f522dccefc58356c1410.tar
dexon-74bc45116aa1c5d0e549f522dccefc58356c1410.tar.gz
dexon-74bc45116aa1c5d0e549f522dccefc58356c1410.tar.bz2
dexon-74bc45116aa1c5d0e549f522dccefc58356c1410.tar.lz
dexon-74bc45116aa1c5d0e549f522dccefc58356c1410.tar.xz
dexon-74bc45116aa1c5d0e549f522dccefc58356c1410.tar.zst
dexon-74bc45116aa1c5d0e549f522dccefc58356c1410.zip
Encoding helpers with tests
Diffstat (limited to 'encoding.go')
-rw-r--r--encoding.go46
1 files changed, 46 insertions, 0 deletions
diff --git a/encoding.go b/encoding.go
new file mode 100644
index 000000000..ca30b47c9
--- /dev/null
+++ b/encoding.go
@@ -0,0 +1,46 @@
+package main
+
+import (
+ "bytes"
+ "encoding/hex"
+ "strings"
+)
+
+func CompactEncode(hexSlice []int) string {
+ terminator := 0
+ if hexSlice[len(hexSlice)-1] == 16 {
+ terminator = 1
+ }
+
+ if terminator == 1 {
+ hexSlice = hexSlice[:len(hexSlice)-1]
+ }
+
+ oddlen := len(hexSlice) % 2
+ flags := 2 * terminator + oddlen
+ if oddlen != 0 {
+ hexSlice = append([]int{flags}, hexSlice...)
+ } else {
+ hexSlice = append([]int{flags, 0}, hexSlice...)
+ }
+
+ var buff bytes.Buffer
+ for i := 0; i < len(hexSlice); i+=2 {
+ buff.WriteByte(byte(16 * hexSlice[i] + hexSlice[i+1]))
+ }
+
+ return buff.String()
+}
+
+func CompactHexDecode(str string) []int {
+ base := "0123456789abcdef"
+ hexSlice := make([]int, 0)
+
+ enc := hex.EncodeToString([]byte(str))
+ for _, v := range enc {
+ hexSlice = append(hexSlice, strings.IndexByte(base, byte(v)))
+ }
+ hexSlice = append(hexSlice, 16)
+
+ return hexSlice
+}