C ++でビッグエンディアンとリトルエンディアンの値を変換するにはどうすればよいですか?
ここでは、C++でリトルエンディアン値をビッグエンディアンに変換する方法またはビッグエンディアン値をリトルエンディアンに変換する方法を説明します。実際のディスカッションに進む前に、ビッグエンディアンとリトルエンディアンとは何ですか?
異なるアーキテクチャでは、マルチバイトデータは2つの異なる方法で保存できます。上位バイトが最初に格納される場合もあります。その場合、これらはビッグエンディアンと呼ばれ、下位バイトが最初に格納される場合は、リトルエンディアンと呼ばれます。
たとえば、数値が0x9876543210の場合、ビッグエンディアンは-
になります。
リトルエンディアンは次のようになります-
このセクションでは、リトルエンディアンをビッグエンディアンに、またはその逆に変換する方法を説明します。これを行うには、1番目と4番目のバイト、および2番目と3番目のバイトを交換する必要があります。論理式を使用してそれらを交換できます。数値のコピーを4回作成し、最初のコピーの場合は最初のバイトを右に24回シフトし、2番目のコピーの場合は00FF0000でマスクし、次に8ビットを右にスワップします。3番目のコピーの場合は0000FF00でマスクします。 、次に左に8ビットシフトし、最後のコピーで要素を左に24回スワップします。次に、これらの4つのコピーを論理的にORして、逆の結果を取得します。
例
#include <iostream> #define SWAP_INT32(x) (((x) >> 24) | (((x) & 0x00FF0000) >> 8) | (((x) & 0x0000FF00) << 8) | ((x) << 24)) using namespace std; void memory_represent(char *value, int n) { int i; for (i = 0; i < n; i++) printf(" %.2x", value[i]); } int main() { unsigned int x = 0x9876543210; int y; cout << "The little endian value is: "; memory_represent((char*)&x, sizeof(x)); cout << endl; y = SWAP_INT32(x); cout << "The Big endian value after conversion is: "; memory_represent((char*)&y, sizeof(y)); cout << endl; }
出力
The little endian value is: 10 32 54 76 The Big endian value after conversion is: 76 54 32 10
-
C ++とC#の違い
C ++は、静的に型付けされ、コンパイルされた、汎用の、大文字と小文字を区別する、自由形式のプログラミング言語であり、手続き型、オブジェクト指向、およびジェネリックプログラミングをサポートします。 C ++は、高水準言語と低水準言語の両方の機能の組み合わせで構成されているため、中水準言語と見なされます。 C#は、アンダース・ヘルスバーグが主導する.NETイニシアチブ内でMicrosoftが開発した、シンプルでモダンな汎用のオブジェクト指向プログラミング言語です。 以下は、C ++とC#の違いです。 メモリ管理 C ++には手動のメモリ管理がありますが、メモリ管理はC#で自動的に処理され
-
Excelでヘクタールとエーカーの間でセルを変換する方法
エーカー およびヘクタール 土地面積を説明する際に一般的に使用される手段です。面積のメートル単位はkm平方ですが、土地面積、特に農地のカウントには、エーカーとヘクタールが推奨されます。 Microsoft Excelでセルをヘクタールとエーカーの間で変換する場合 、この投稿を確認してください。 Excelでヘクタールとエーカーの間でセルを変換する エーカーからヘクタールへの変換式およびその逆の変換式 エーカーからヘクタールへ、またはその逆の変換式は次のとおりです。 ヘクタール=2.47105エーカー エーカー=0.404686ヘクタール Excelでエーカーからヘクタールにセルを変換す