2016-12-28 2 views
-1
package main 

import (
    "encoding/binary" 
    "fmt" 
    "bytes" 
) 

func main(){ 
    b := new(bytes.Buffer) 
    c := new(bytes.Buffer) 
    binary.Write(b, binary.LittleEndian, []byte{0, 1}) 
    binary.Write(b, binary.BigEndian, []byte{0, 1}) 
    binary.Write(c, binary.LittleEndian, uint16(256)) 
    binary.Write(c, binary.BigEndian, uint16(256)) 
    fmt.Println(b.Bytes()) // [0 1 0 1] 
    fmt.Println(c.Bytes()) // [0 1 1 0] 
} 

binary.Write()バイト順序がuint8, uint16, uint64 ..etcのために働いたが、[]byteされる理由は、非常に興味深いのですか?binary.Write()のバイト順序は、[]のために働いていないバイト

binary.LittleEndianで注文し、bytes.Bufferに書き込む必要がある場合は、先にそれを取り消す必要がありますか?この問題を解決する有効な方法はありますか?

ありがとうございました。

答えて

1

整数型だけがバイト順にスワップされます。

バイトのスライスの場合、バイナリパッケージは実際に何をスワップするのか分かりません。

例えば、1kのデータを渡した場合、どうすればよいか分かりますか?

int16、int32またはint64として扱いますか?

それとも、スライス全体を逆転させると思いますか?

1

注文するものがありません。バイトは8ビットなので、0から255まで(符号なし)行くことができます。 uint16は2バイトなので、別々に注文することができます。

ByteOrderは、int8についても定義されていません。 uint8またはint8の場合は、source codeをチェックして、が渡された注文を単に使用していないことを確認できます。 (A byteuint8の別名です)

関連する問題