Goでバイナリバイトを符号付き整数と浮動小数点に変換する方法?

DDD
リリース: 2024-10-31 09:54:02
オリジナル
458 人が閲覧しました

How to Convert Binary Bytes to Signed Integers and Floats in Go?

Go でバイナリ バイトを符号付き整数および浮動小数点数に変換する

Go では、バイナリ パッケージはバイト スライス ([]byte) を変換するためのメソッドを提供します。 ) を符号なし整数に変換します (例: Uint16、 Uint32)。ただし、バイト スライスを符号付き整数または浮動小数点数に変換するための明示的なメソッドはありません。

なぜ省略されているのですか?

バイナリ パッケージの原因は、エンディアンがバイトから数値型を解釈する方法に影響を与えるという事実によるものと考えられます。エンディアンネスは、バイトがメモリに格納される順序を指します。システム アーキテクチャに応じて、バイトはリトル エンディアン (最下位バイトが最初) またはビッグ エンディアン (最上位バイトが最初) で配置できます。

符号付き整数への変換

専用のメソッドがないにもかかわらず、[]byte から符号付き整数への変換は型変換によって実現できます。符号なし整数と符号付き整数は同じメモリ レイアウトを持つため、変換は簡単です。

<code class="go">a := binary.LittleEndian.Uint16(sampleA)
a2 := int16(a) // Convert to signed int16</code>
ログイン後にコピー

同様に、uint64 値を int64 値に変換できます。

Float への変換

符号なし整数を浮動小数点に変換するのはさらに複雑です 関与した。単純な型変換を試みることもできますが、メモリ表現ではなく数値が変換されることになります。

代わりに、数学パッケージで提供される関数を使用してください。

<code class="go">a := binary.LittleEndian.Uint64(sampleA)
a2 := math.Float64frombits(a) // Convert to float64</code>
ログイン後にコピー

同じメモリ レイアウトで float 値を符号なし整数に変換するには、

<code class="go">a := math.Float64bits(a2) // Convert float64 to uint64</code>
ログイン後にコピー

Read() および Write() を使用します。便利な関数

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

<code class="go">var pi float64
buf := bytes.NewReader(sampleA)
err := binary.Read(buf, binary.LittleEndian, &pi)
if err != nil {
    panic(err)
}</code>
ログイン後にコピー

以上がGoでバイナリバイトを符号付き整数と浮動小数点に変換する方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート