package encoding import ( "bytes" "fmt" ) type GSM7Coder struct{} func (c *GSM7Coder) Encode(s string, buf *bytes.Buffer) error { // utf8 := *(*[]byte)(unsafe.Pointer(&s)) utf8 := []byte(s) var offset byte = 1 var bitshift byte = 1 for index, septet := range utf8 { if septet > 0b01111111 { return fmt.Errorf("invalid character at index %d", index) } bindex := byte(index) if bindex == 0 { continue } mask := byte(255 >> (8 - bitshift)) masked := (mask & septet) << (8 - bitshift) utf8[bindex-offset] |= masked utf8[bindex] >>= bitshift buf.WriteByte(utf8[bindex-offset]) bitshift++ if bitshift == 8 { offset++ bitshift = 1 } } return nil } func (c *GSM7Coder) Decode(buf *bytes.Buffer) (string, error) { return buf.String(), nil }