func DecodeLiteral(buf *swrap.SWrap) (value string) { // 最初のバイトを取り出す first := (*buf)[0] // 最初の 1bit をみて huffman かどうか取得 huffmanEncoded := (first&0x80 == 0x80) Trace("huffman = %t", huffmanEncoded) if huffmanEncoded { // 最初のバイトから 1 bit 目を消す (*buf)[0] = first & 127 // ここで prefixed Integer 7 で読む。 b := DecodePrefixedInteger(buf, 7) Trace("Literal Length = %v, buf size=%v", b, buf.Len()) // その長さの分だけバイト値を取り出す code := make([]byte, 0) for ; b > 0; b-- { code = append(code, buf.Shift()) } // ハフマンデコード value = string(huffman.Decode(code)) Trace("decoded = %v", value) } else { valueLength := DecodePrefixedInteger(buf, 7) value = DecodeString(buf, valueLength) } return value }