C ++でビッグエンディアンとリトルエンディアンの値を変換するにはどうすればよいですか?

Uhall

C ++でビッグエンディアンとリトルエンディアンの値を変換するにはどうすればよいですか?

編集:わかりやすくするために、バイナリデータ(倍精度浮動小数点値と32ビットおよび64ビット整数)をあるCPUアーキテクチャから別のCPUアーキテクチャに変換する必要があります。これにはネットワーキングが含まれないため、ntoh()および同様の関数はここでは機能しません。

編集#2:私が受け入れた答えは、私がターゲットにしているコンパイラーに直接当てはまります(それが私がそれを選んだ理由です)。ただし、ここには他にも非常に優れた、より移植性の高い回答があります。

ニルス・ピペンブリンク

Visual C ++を使用している場合は、次のようにします。intrin.hをインクルードし、次の関数を呼び出します。

16ビット数の場合:

unsigned short _byteswap_ushort(unsigned short value);

32ビット数の場合:

unsigned long _byteswap_ulong(unsigned long value);

64ビット番号の場合:

unsigned __int64 _byteswap_uint64(unsigned __int64 value);

8ビットの数値(chars)は変換する必要はありません。

また、これらは符号なしの値に対してのみ定義され、符号付き整数に対しても機能します。

floatとdoubleの場合、単純な整数の場合と同様に、ホストマシンのバイト順である場合とない場合があるため、より困難です。ビッグエンディアンのマシンではリトルエンディアンのフロートを取得でき、その逆も可能です。

他のコンパイラにも同様の組み込み関数があります。

ではGCC例えば、あなたが直接呼び出すことができ、ここで文書化されているように、いくつかの組み込みコマンドを

uint32_t __builtin_bswap32 (uint32_t x)
uint64_t __builtin_bswap64 (uint64_t x)

(何かを含める必要はありません)。Afaik bits.hは、gcc中心ではない方法でも同じ関数を宣言します。

16ビットスワップそれはほんの少し回転します。

独自にロールする代わりに組み込み関数を呼び出すと、最高のパフォーマンスとコード密度が得られます。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

C ++で64ビット整数をビッグエンディアンバイト配列に変換するにはどうすればよいですか。

分類Dev

C ++でビッグ/リトルエンディアンバイトを整数に、またはその逆に変換する方法

分類Dev

C#の動的列と動的プロパティでLINQクエリをフィルタリングするにはどうすればよいですか?

分類Dev

C#WindowsアプリケーションでデータグリッドビューエントリからSQLデータベースにレコードを挿入するにはどうすればよいですか?

分類Dev

ゴールデンCモデルとRTL間の順不同トランザクションのスコアボードをコーディングするにはどうすればよいですか?

分類Dev

C#Active Directoryアプリ-サービスアカウントのクレデンシャルを保存するにはどうすればよいですか?

分類Dev

C#でリストとページのバインディングを使用してDataTemplateを作成するにはどうすればよいですか?

分類Dev

静的バインディングと動的バインディングの動作を確認するにはどうすればよいですか?[C ++]

分類Dev

リンクリストのインデックスに値を挿入するにはどうすればよいですか?c ++セグメンテーションフォールトエラー

分類Dev

リトルエンディアンプロセッサはどのようにしてCのメモリに数値を保存しますか?

分類Dev

自己参照C#エンティティを取得してJSON.Netで子をシリアル化するにはどうすればよいですか?

分類Dev

C#.NET、PHP、MySQL間で共通のエンコーディングを取得するにはどうすればよいですか?

分類Dev

コンパイラがCでリトルエンディアンかビッグエンディアンかを判断します

分類Dev

C#でJavascriptSerializerを使用してネストされたエンティティ(モデル)をシリアル化するにはどうすればよいですか?

分類Dev

「パディングが無効で削除できない」というエラーが発生した場合、C ++ Rijndael暗号化をC#に変換するにはどうすればよいですか?

分類Dev

リトルエンディアンの16進ダンプ出力をビッグエンディアンに変換する際の問題(Cプログラミング)

分類Dev

パーティションをWindowsのようなCおよびDディスクに変換するにはどうすればよいですか?

分類Dev

Clangを使用してC ++ 17でutf-16文字列リテラルのエンディアンを指定するにはどうすればよいですか?

分類Dev

C# でリスト アイテムを ASCII エンコーディングに変換する方法

分類Dev

Cバインディングで配列型を使用するにはどうすればよいですか?

分類Dev

JavaまたはC ++でGUIデスクトップアプリをプログラミングするにはどうすればよいですか?

分類Dev

C#でラテン文字をHTMLエンティティ(10進数)に変換するにはどうすればよいですか?

分類Dev

C#でBase64 URLセーフエンコーディングを実現するにはどうすればよいですか?

分類Dev

C#でHTMLエンコーディングを正しく取得するにはどうすればよいですか?

分類Dev

ビット演算の結果はJavaのエンディアンに依存しますか?CまたはC ++ではどうですか?

分類Dev

生成されたC#ODataクライアントコードを使用して、複数のネストされたエンティティを持つエンティティを要求するにはどうすればよいですか?

分類Dev

変数 `c`の値を変更するときに、マシンの精度のエラーをテストするにはどうすればよいですか?

分類Dev

個別のフレーム画像をディスクに書き込まずに、C ++プログラムで生成された複数の画像からビデオをエンコードするにはどうすればよいですか?

分類Dev

Cユニオンをデルファイに変換するにはどうすればよいですか?

Related 関連記事

  1. 1

    C ++で64ビット整数をビッグエンディアンバイト配列に変換するにはどうすればよいですか。

  2. 2

    C ++でビッグ/リトルエンディアンバイトを整数に、またはその逆に変換する方法

  3. 3

    C#の動的列と動的プロパティでLINQクエリをフィルタリングするにはどうすればよいですか?

  4. 4

    C#WindowsアプリケーションでデータグリッドビューエントリからSQLデータベースにレコードを挿入するにはどうすればよいですか?

  5. 5

    ゴールデンCモデルとRTL間の順不同トランザクションのスコアボードをコーディングするにはどうすればよいですか?

  6. 6

    C#Active Directoryアプリ-サービスアカウントのクレデンシャルを保存するにはどうすればよいですか?

  7. 7

    C#でリストとページのバインディングを使用してDataTemplateを作成するにはどうすればよいですか?

  8. 8

    静的バインディングと動的バインディングの動作を確認するにはどうすればよいですか?[C ++]

  9. 9

    リンクリストのインデックスに値を挿入するにはどうすればよいですか?c ++セグメンテーションフォールトエラー

  10. 10

    リトルエンディアンプロセッサはどのようにしてCのメモリに数値を保存しますか?

  11. 11

    自己参照C#エンティティを取得してJSON.Netで子をシリアル化するにはどうすればよいですか?

  12. 12

    C#.NET、PHP、MySQL間で共通のエンコーディングを取得するにはどうすればよいですか?

  13. 13

    コンパイラがCでリトルエンディアンかビッグエンディアンかを判断します

  14. 14

    C#でJavascriptSerializerを使用してネストされたエンティティ(モデル)をシリアル化するにはどうすればよいですか?

  15. 15

    「パディングが無効で削除できない」というエラーが発生した場合、C ++ Rijndael暗号化をC#に変換するにはどうすればよいですか?

  16. 16

    リトルエンディアンの16進ダンプ出力をビッグエンディアンに変換する際の問題(Cプログラミング)

  17. 17

    パーティションをWindowsのようなCおよびDディスクに変換するにはどうすればよいですか?

  18. 18

    Clangを使用してC ++ 17でutf-16文字列リテラルのエンディアンを指定するにはどうすればよいですか?

  19. 19

    C# でリスト アイテムを ASCII エンコーディングに変換する方法

  20. 20

    Cバインディングで配列型を使用するにはどうすればよいですか?

  21. 21

    JavaまたはC ++でGUIデスクトップアプリをプログラミングするにはどうすればよいですか?

  22. 22

    C#でラテン文字をHTMLエンティティ(10進数)に変換するにはどうすればよいですか?

  23. 23

    C#でBase64 URLセーフエンコーディングを実現するにはどうすればよいですか?

  24. 24

    C#でHTMLエンコーディングを正しく取得するにはどうすればよいですか?

  25. 25

    ビット演算の結果はJavaのエンディアンに依存しますか?CまたはC ++ではどうですか?

  26. 26

    生成されたC#ODataクライアントコードを使用して、複数のネストされたエンティティを持つエンティティを要求するにはどうすればよいですか?

  27. 27

    変数 `c`の値を変更するときに、マシンの精度のエラーをテストするにはどうすればよいですか?

  28. 28

    個別のフレーム画像をディスクに書き込まずに、C ++プログラムで生成された複数の画像からビデオをエンコードするにはどうすればよいですか?

  29. 29

    Cユニオンをデルファイに変換するにはどうすればよいですか?

ホットタグ

アーカイブ