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

DDD
リリース: 2024-10-31 01:15:03
オリジナル
266 人が閲覧しました

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!