Go でバイト配列を符号付き整数および浮動小数点数に変換する
Go では、バイナリ パッケージは []byte から符号なし整数を変換する関数を提供します。 binary.LittleEndian.Uint16() や binary.BigEndian.Uint32() などの配列。ただし、符号付き整数または浮動小数点数に直接相当するものはありません。
符号付き整数変換関数がない理由
符号付き整数変換関数がない主な原因は、バイナリ表現を符号付き値または符号なし値として解釈するのはプログラミング ロジックの問題であるという事実に注意してください。 [] バイト配列自体には生のバイナリ データのみが含まれており、アプリケーションの要件に応じて符号付きまたは符号なしとして解釈できます。
符号付き整数に変換する方法
符号なし整数値を符号付き整数値に変換するには、単純な型変換を使用できます。同じサイズの符号なし整数と符号付き整数のメモリ レイアウトは同一であるため、int16(a) を使用して a を uint16 から int16 に変換すると、適切な符号を割り当てながら元のバイナリ表現が保持されます。
への変換Floats
符号なし整数から浮動小数点数への変換には、もう少し手間がかかります。 math パッケージには、この目的のための関数 math.Float32frombits() と math.Float64frombits() が用意されています。逆に、 math.Float32bits() と math.Float64bits() を使用して、float 値の符号なし整数表現を取得できます。
Binary.Read() と Binary.Write() の使用
バイナリ パッケージには、これらの変換を内部でより効率的に実行できる Read() 関数と Write() 関数も含まれています。これらの関数を使用すると、中間の型変換を必要とせずに、型付きの値を直接読み取ることができます。
浮動小数点変換に Binary.Read() を使用する例
次の点を考慮してください。例:
b := []byte{0x18, 0x2d, 0x44, 0x54, 0xfb, 0x21, 0x09, 0x40}
var pi float64
buf := bytes.NewReader(b)
err := binary.Read(buf, binary.LittleEndian, &pi)
if err != nil {
fmt.Println("binary.Read failed:", err)
}
fmt.Println(pi) // Output: 3.141592653589793
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3