私はパケット構造を持っており、バイナリにシリアル化してワイヤで送ることができます。構造体を[]を使ってバイトに変換する
は、多くのパケット構造がありますが、私は例として、ログイン・パケットをあげる:
login struct {
seq uint8
id uint16
username [16]string
password [16]string
unknown1 [16]byte
}
私はあなたが非固定サイズの構造にbinary.Write
を使用できないことをどこかで読みました。しかし、私は自分の構造が固定されていると信じています(私が間違っていれば、私は間違っている可能性があります)。今binary.Write: invalid type main.login
、この問題を解決する方法があります:
var buf bytes.Buffer
x := login{
seq: 2,
id: 1,
username: [16]string{"username"},
password: [16]string{"password"},
}
err := binary.Write(&buf, binary.LittleEndian, x)
if err != nil {
log.Fatalln(err)
}
は私にエラーを与える:
さて、このコードを使用していますか?別の方法がありますか? Cで構造体を使用してネットワーク経由で送信する方法とほとんど同じです。
「[16] string'は実際には固定サイズではないと思いますか? – majidarif
@CeriseLimónそうです。私は最大サイズの16バイトの文字列を書く必要があり、長さが16に達しない場合は\ 0で埋めます:) – majidarif