ホームページ バックエンド開発 Golang golangのバイトオーダー変換

golangのバイトオーダー変換

May 14, 2023 pm 03:03 PM

Golang は、プログラマーがさまざまなタスクを処理しやすくするための豊富な組み込み関数とデータ型のセットを提供する最新のプログラミング言語です。エンディアン変換も非常に重要な操作です。この記事では、Golang でエンディアン変換を実行する方法について詳しく説明します。

バイトオーダーとは何ですか?

コンピュータのストレージでは、バイトがストレージの最小単位であり、各バイトは 8 ビットのバイナリで構成されます。エンディアンネスとは、整数や浮動小数点数などのマルチバイト データを格納するときにメモリ内でバイトが配置される順序を指します。バイトオーダーには、ビッグエンディアンとリトルエンディアンの 2 種類があります。

ビッグエンディアンとは、上位バイトが最初、下位バイトが最後になる記憶方式を指し、ネットワーク伝送やほとんどのコンピュータの CPU で一般的に使用されています。たとえば、数値 10 のバイナリ表現は 0000 1010 です。ビッグエンディアン順序で格納された場合、メモリ内の順序は 0000 1010 になります。

リトル エンディアンは、下位バイトが最初で上位バイトが最後になる記憶方式で、Intel x86 や ARM アーキテクチャなどの一部のプロセッサ アーキテクチャで一般的に使用されています。たとえば、リトルエンディアン ストレージ内の数値 10 の順序は 1010 0000 です。

Golang でのエンディアン変換

Golang ではエンディアン変換は主に標準ライブラリの「encoding/binary」パッケージを使用します。このパッケージは、バイナリのデコードとエンコード、ビッグエンディアンとスモールエンディアンの変換など、バイトオーダーを変換するためのいくつかの関数を提供します。

  1. バイナリ デコード

「encoding/binary」パッケージの「Read」シリーズの関数は、バイト ストリームを対応するデータ型にデコードするために使用されます。このうち「binary.Read」関数には、入力バイトストリーム、対象オブジェクトへのポインタ、使用するエンディアンタイプの3つのパラメータがあります。例:

func main() {
    bytes := []byte{0x10, 0x27, 0x00, 0x00}
    var i int32
    err := binary.Read(bytes.NewReader(bytes), binary.LittleEndian, &i)
    if err != nil {
        log.Fatal("binary.Read failed:", err)
    }
    fmt.Println(i) // Output: 10000
}
ログイン後にコピー

上記のコードは、バイト ストリーム [0x10, 0x27, 0x00, 0x00] をリトルエンディアン順に int32 型の変数 i にデコードします。

  1. バイナリ エンコード

「encoding/binary」パッケージの「Write」シリーズの関数は、データ型を指定されたバイトのバイナリ ストリームにエンコードするために使用されます。注文。このうち「binary.Write」関数には、出力バイトストリーム、使用するエンディアンタイプ、エンコードする値の3つのパラメータがあります。例:

func main() {
    var i int32 = 10000
    buf := new(bytes.Buffer)
    err := binary.Write(buf, binary.LittleEndian, i)
    if err != nil {
        log.Fatal("binary.Write failed:", err)
    }
    fmt.Println(buf.Bytes()) // Output: [0x10 0x27 0x00 0x00]
}
ログイン後にコピー

上記のコードは、値 10000 の int32 型変数 i を、リトル エンディアンのバイト順序でバイト ストリーム [0x10, 0x27, 0x00, 0x00] にエンコードします。

  1. ビッグ エンディアンとスモール エンディアンの変換

上記のバイナリ デコードとエンコードに加えて、「エンコード/バイナリ」パッケージには、バイト オーダーを変換するための 2 つの関数も提供されます。 BigEndianそしてリトルエンディアン。

「BigEndian」はネットワーク バイト オーダー (ビッグ エンディアン) でデータ型をエンコードおよびデコードし、「LittleEndian」はリトル エンディアン オーダーでデータ型をエンコードおよびデコードします。例:

func main() {
    var i int32 = 10000
    buf := new(bytes.Buffer)
    binary.Write(buf, binary.BigEndian, i)
    fmt.Println(buf.Bytes()) // Output: [0x27 0x10 0x00 0x00]

    buf.Reset()
    binary.Write(buf, binary.LittleEndian, i)
    fmt.Println(buf.Bytes()) // Output: [0x10 0x27 0x00 0x00]
}
ログイン後にコピー

上記のコードは、int32 型変数 i をビッグ エンディアンとリトル エンディアンの順序でエンコードし、出力バイト ストリームはそれぞれ [0x27, 0x10, 0x00, 0x00] と [0x10, 0x27, 0x00] になります。 、0x00]。

概要

Golang の「encoding/binary」パッケージは、バイナリのデコードとエンコード、ビッグエンディアン変換など、バイトオーダー変換のための豊富な関数を提供します。これらの機能を利用することで、開発者はエンディアン変換を容易に行うことができ、マルチバイトデータの保存や送信も容易に行うことができます。

以上がgolangのバイトオーダー変換の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Go Language Packのインポート:アンダースコアとアンダースコアなしの違いは何ですか? Go Language Packのインポート:アンダースコアとアンダースコアなしの違いは何ですか? Mar 03, 2025 pm 05:17 PM

この記事では、Goのパッケージインポートメカニズム:名前付きインポート(例:インポート "fmt")および空白のインポート(例:_" fmt")について説明しています。 名前付きインポートはパッケージのコンテンツにアクセス可能になり、空白のインポートはtのみを実行します

Beegoフレームワークのページ間で短期情報転送を実装する方法は? Beegoフレームワークのページ間で短期情報転送を実装する方法は? Mar 03, 2025 pm 05:22 PM

この記事では、Webアプリケーションでのページ間データ転送のためのBeegoのnewflash()関数について説明します。 newflash()を使用して、コントローラー間で一時的なメッセージ(成功、エラー、警告)を表示し、セッションメカニズムを活用することに焦点を当てています。 リミア

MySQLクエリ結果リストをGO言語のカスタム構造スライスに変換する方法は? MySQLクエリ結果リストをGO言語のカスタム構造スライスに変換する方法は? Mar 03, 2025 pm 05:18 PM

この記事では、MySQLクエリの結果をGO structスライスに効率的に変換することを詳しく説明しています。 データベース/SQLのスキャン方法を使用して、手動で解析することを避けて強調しています。 DBタグとロブを使用した構造フィールドマッピングのベストプラクティス

GOでテスト用のモックオブジェクトとスタブを書くにはどうすればよいですか? GOでテスト用のモックオブジェクトとスタブを書くにはどうすればよいですか? Mar 10, 2025 pm 05:38 PM

この記事では、ユニットテストのためにGOのモックとスタブを作成することを示しています。 インターフェイスの使用を強調し、模擬実装の例を提供し、模擬フォーカスを維持し、アサーションライブラリを使用するなどのベストプラクティスについて説明します。 articl

GOのジェネリックのカスタムタイプ制約を定義するにはどうすればよいですか? GOのジェネリックのカスタムタイプ制約を定義するにはどうすればよいですか? Mar 10, 2025 pm 03:20 PM

この記事では、GENICSのGOのカスタムタイプの制約について説明します。 インターフェイスがジェネリック関数の最小タイプ要件をどのように定義するかを詳しく説明し、タイプの安全性とコードの再利用性を改善します。 この記事では、制限とベストプラクティスについても説明しています

Go言語でファイルを便利に書く方法は? Go言語でファイルを便利に書く方法は? Mar 03, 2025 pm 05:15 PM

この記事では、goで効率的なファイルの書き込みを詳しく説明し、os.writefile(小さなファイルに適している)とos.openfileおよびbuffered write(大規模ファイルに最適)と比較します。 延期エラー処理、Deferを使用し、特定のエラーをチェックすることを強調します。

Goでユニットテストをどのように書きますか? Goでユニットテストをどのように書きますか? Mar 21, 2025 pm 06:34 PM

この記事では、GOでユニットテストを書くことで、ベストプラクティス、モッキングテクニック、効率的なテスト管理のためのツールについて説明します。

トレースツールを使用して、GOアプリケーションの実行フローを理解するにはどうすればよいですか? トレースツールを使用して、GOアプリケーションの実行フローを理解するにはどうすればよいですか? Mar 10, 2025 pm 05:36 PM

この記事では、トレースツールを使用してGOアプリケーションの実行フローを分析します。 手動および自動計装技術について説明し、Jaeger、Zipkin、Opentelemetryなどのツールを比較し、効果的なデータの視覚化を強調しています

See all articles