2013年6月13日木曜日

Go で整数をバイト配列に変換する

Go で int64 などの整数を []byte へ変換する方法です。
encoding/binary パッケージを使います。
package main

import (
    "encoding/binary"
    "fmt"
)

func main() {
    src := int64(123456789123456789)
    result := make([]byte, binary.MaxVarintLen64)
    binary.PutVarint(result, src)
    fmt.Printf("Bytes: %X", result) // Bytes: AAFC82CDF5D2CDB60300
}

変換後の []byte のサイズが小さいとクラッシュしてしまいます。
binary パッケージに変換元のデータ型に合わせて []byte の長さが定義されています。
int64 を変換するなら binary.MaxVarintLen64 といった具合です。

変換では各バイトの先頭ビットを continuation bit として使用しているため、
int64 だからといって 8 バイトになる訳ではなく、決め打ちするとクラッシュすることがあります。

binary package source - Go Lang
http://golang.org/src/pkg/encoding/binary/varint.go?m=text

0 件のコメント:

コメントを投稿