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

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

DDD
DDDオリジナル
2024-10-30 07:42:02469ブラウズ

 How to Convert Go []byte to Little/Big-Endian Signed Integer or Floating-Point Numbers?

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

バイナリ データを扱う場合、これは重要ですエンディアンの概念を理解するため。エンディアンとは、マルチバイト数値がメモリに格納される方法を指します。 Go のバイナリ パッケージは、Uint16 や Uint32 などのビッグ エンディアンとリトル エンディアンの符号なし整数型の間で変換するための便利な関数を提供します。ただし、符号付き整数と浮動小数点数は直接サポートされていません。

この制限を克服する鍵は、次の 2 つのステップでタスクに取り組むことです。

  1. 数値をアセンブルします。 BigEndian または LittleEndian を使用して目的のバイト順序を指定します。
  2. 結果のバイトを適切な符号付き整数または浮動小数点数型として解釈します。

符号付き整数への変換

たとえば、uint16 を符号付き int16 として解釈するには、同じメモリ レイアウトを共有するため、単純に型変換を使用します。

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

int64 などのより大きな符号付き整数型にも同様の原則が適用されます。

浮動小数点数への変換

符号なし整数を浮動小数点型に変換することは、型変換を通じて直接行うことはできませんが、Go の数学パッケージには、このために特別に設計された関数が用意されています。目的。これらの関数を使用すると、基になるメモリ表現を変更せずに、符号なし整数を浮動小数点数に、またはその逆に変換できます。

<code class="go">a := binary.LittleEndian.Uint64(sampleA)
a2 := math.Float64frombits(a)
// To convert back to unsigned integer:
a3 := math.Float64bits(a2)</code>

binary.Read() および Write() を使用する代替方法

Go の binary.Read および Write 関数を使用すると、基礎となるメモリ表現に直接アクセスすることで、これらの変換をより効率的に実行できます。以下の例を確認してください:

<code class="go">pi := float64(3.141592653589793)
buf := new(bytes.Buffer)
binary.Write(buf, binary.LittleEndian, &pi)

var result float64
binary.Read(buf, binary.LittleEndian, &result)
fmt.Println(result)</code>

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

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