ストレージ・エンドのサイズを決定する問題について

次のようにビッグエンドと小端メモリには相違点は次のとおりです。

小端店舗:高い高アドレス上のデータ、低中低アドレスデータ。

ビッグエンディアンストレージ:データ・ストレージへの大端部と小端反対。低上のアドレスの高いデータを、高アドレスの低いデータ。

二端子メモリのサイズは、によって決定されます。

方法A:文字ポインタ解析

32ビットプラットフォームでは、int型4バイト、文字へのポインタが1バイトである、と私たちは文字に強いポインタをintに合格した場合、データの1バイトのみを保存し、唯一の必要性我々はそう一致するかどうかを判定することができる最初のバイトと第二のバイトINT内部チャーを分析します。 
リトルエンディアンモードが一致していた場合には、ビッグエンディアンモードのためにその逆。

注:
ここでは、コードがint A = 1リトルエンディアンモードであれば、ケース1のintは、下位アドレスも、下位アドレスに格納され、文字へのポインタを渡すことが強くなります、それは判断することができましょう。

#include <stdio.h>
int main()
{
    int a = 1;
    if (*(char*)&a == 1)
        printf( "小端模式" );
    else
       printf( "大端模式" );
    return 0;
}

次のように実際のテストは、次のとおりです。
 

方法2は:連邦の分析
我々はint型できるように、すべてのデータ共有アドレス空間のコンソーシアムから、格納されたデータが格納されているすべてのメンバーが、下位アドレスから開始し、継手本体のchar型の変数が定義され、次いで外側インスタンス化変数INT、変数は暗黙的型変換に対応したチャーコールを作成する際に、結果が1である場合、低バイトの両方リトルエンディアンマシンはビッグエンディアンマシンに対し、下位アドレスに格納されています。

#include <stdio.h>
union Test
{
    int a;
    char b;
};
int main()
{
    Test t;
    t.a = 1;
    if (t.b == 1)
        printf( "小端模式" );
    else
        printf( "大端模式" );
    return 0;
}

次のように実際のテストは、次のとおりです。

公開された33元の記事 ウォン称賛30 ビュー20000 +

おすすめ

転載: blog.csdn.net/baidu_15547923/article/details/100064256