ホームページ  >  記事  >  バックエンド開発  >  Go []byte をリトル/ビッグエンディアンの符号付き整数または浮動小数点に変換するにはどうすればよいですか?

Go []byte をリトル/ビッグエンディアンの符号付き整数または浮動小数点に変換するにはどうすればよいですか?

DDD
DDDオリジナル
2024-10-31 01:15:03267ブラウズ

How do you convert Go []byte to Little/Big-Endian Signed Integer or Float?

Go []byte をリトル/ビッグエンディアンの符号付き整数または浮動小数点に変換します

[]byte に格納されたバイナリ データを符号付き整数や浮動小数点などの数値型に変換します。ポイント番号を使用するには、エンディアンを理解する必要があります。エンディアンは、バイトがメモリに格納される順序を定義します。2 つの一般的な形式は、リトル エンディアン (最下位バイトが最初) とビッグ エンディアン (最上位バイトが最初) です。

Go バイナリ パッケージでは、 []byte を符号なし整数に変換する LittleEndian.Uint16() のような関数ですが、符号付き整数 (Int16()) に直接相当する関数はありません。これは、エンディアンはデータの解釈にのみ影響し、メモリ内の実際の表現には影響しないためです。

符号なし整数を符号付き整数に変換するには、同じメモリ レイアウトを共有するため、単純な型変換で十分です。例:

<code class="go">a := binary.LittleEndian.Uint16(sampleA)
a2 := int16(a)</code>

同様に、数学パッケージ関数 Float32frombits() および Float64frombits() を使用して、符号なし整数を浮動小数点数に変換できます。

<code class="go">a := binary.LittleEndian.Uint64(sampleA)
a2 := math.Float64frombits(a)</code>

バイナリパッケージには、これらの変換を内部で実行できる Read() 関数と Write() 関数も提供されます。

<code class="go">import "bytes"

b := []byte{0x18, 0x2d, 0x44, 0x54, 0xfb, 0x21, 0x09, 0x40}

buf := bytes.NewReader(b)
var pi float64
err := binary.Read(buf, binary.LittleEndian, &amp;pi)
if err != nil {
    fmt.Println("binary.Read failed:", err)
}
fmt.Println(pi)

// Using Read() produces the same result as using Uint64() and Float64frombits():
a := binary.LittleEndian.Uint64(b)
a2 := math.Float64frombits(a)
fmt.Println(a2)

// Output:
// 3.141592653589793
// 3.141592653589793</code>

以上がGo []byte をリトル/ビッグエンディアンの符号付き整数または浮動小数点に変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。