Go []byte をリトル/ビッグエンディアンの符号付き整数または浮動小数点に変換する方法?
バイナリ データを扱う場合、これは重要ですエンディアンの概念を理解するため。エンディアンとは、マルチバイト数値がメモリに格納される方法を指します。 Go のバイナリ パッケージは、Uint16 や Uint32 などのビッグ エンディアンとリトル エンディアンの符号なし整数型の間で変換するための便利な関数を提供します。ただし、符号付き整数と浮動小数点数は直接サポートされていません。
この制限を克服する鍵は、次の 2 つのステップでタスクに取り組むことです。
符号付き整数への変換
たとえば、uint16 を符号付き int16 として解釈するには、同じメモリ レイアウトを共有するため、単純に型変換を使用します。
<code class="go">a := binary.LittleEndian.Uint16(sampleA) a2 := int16(a)</code>
int64 などのより大きな符号付き整数型にも同様の原則が適用されます。
浮動小数点数への変換
符号なし整数を浮動小数点型に変換することは、型変換を通じて直接行うことはできませんが、Go の数学パッケージには、このために特別に設計された関数が用意されています。目的。これらの関数を使用すると、基になるメモリ表現を変更せずに、符号なし整数を浮動小数点数に、またはその逆に変換できます。
<code class="go">a := binary.LittleEndian.Uint64(sampleA) a2 := math.Float64frombits(a) // To convert back to unsigned integer: a3 := math.Float64bits(a2)</code>
binary.Read() および Write() を使用する代替方法
Go の binary.Read および Write 関数を使用すると、基礎となるメモリ表現に直接アクセスすることで、これらの変換をより効率的に実行できます。以下の例を確認してください:
<code class="go">pi := float64(3.141592653589793) buf := new(bytes.Buffer) binary.Write(buf, binary.LittleEndian, &pi) var result float64 binary.Read(buf, binary.LittleEndian, &result) fmt.Println(result)</code>
以上がGo []byte をリトル/ビッグエンディアンの符号付き整数または浮動小数点数に変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。