Go でバイト配列を符号付き整数および浮動小数点に変換する
Go では、バイナリ パッケージは []byte から符号なし整数を変換する関数を提供しますbinary.LittleEndian.Uint16() やbinary.BigEndian.Uint32()。ただし、符号付き整数または浮動小数点数に直接相当するものはありません。
符号付き整数変換関数が存在しない理由
符号付き整数変換関数が存在しない主な原因は、バイナリ表現を符号付き値または符号なし値として解釈するのはプログラミング ロジックの問題であるという事実に注意してください。 []byte 配列自体には生のバイナリ データのみが含まれており、アプリケーションの要件に応じて符号付きまたは符号なしとして解釈できます。
符号付き整数に変換する方法
符号なし整数値を符号付き整数値に変換するには、単純な型変換を使用できます。同じサイズの符号なし整数と符号付き整数のメモリ レイアウトは同一であるため、int16(a) を使用して a を uint16 から int16 に変換すると、適切な符号を割り当てながら元のバイナリ表現が保持されます。
への変換Floats
符号なし整数から浮動小数点への変換には少し時間がかかりますより多くの関与を。 math パッケージには、この目的のための関数 math.Float32frombits() と math.Float64frombits() が用意されています。逆に、 math.Float32bits() と math.Float64bits() を使用して、float 値の符号なし整数表現を取得できます。
Binary.Read() と Binary.Write() の使用
バイナリ パッケージには、これらの変換をより効率的に実行できる Read() 関数と Write() 関数も含まれていますボンネットの下で。これらの関数を使用すると、中間の型変換を必要とせずに、型付きの値を直接読み取ることができます。
浮動小数点変換に Binary.Read() を使用する例
次のことを考慮してください。例:
<code class="go">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</code>
以上がGo でバイト配列を符号付き整数および浮動小数点数に変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。