大小端判断及转换


#include 
#include 
using namespace std;

int main(int argc, char *argv[])
{
    int a=0x1234; //小端 34 12 
    char c=(char)(a); //判断是大端还是小端,char 强制转换会把高位的地址给去掉
    // int 占4字节,char 占1字节,只保留1字节的数据。 
    if(c == 0x12)
    {
        cout<<"big"<<endl;
    }
    else if(c == 0x34)
    {
        cout<<"small"<<endl;
    }
    // 
    int b=0x00000018;
    cout<<sizeof(b)<//4
    cout<endl;
    printf("%x\n",(b& 0x000000ff)<<24);// b一个16进制由4位二进制表示,24表示向左
    //移6个0 
    // 如果右移或者左移的位数>=该数据的位数
    //  b << 32 // 实际移动的位数= 32 mod 该数据位数 =0 
    //  b >> 36 // 实际移动的位数= 36 mod 该数据位数 =4 
    printf("%x\n",(a & 0xFF000000)>>24 | (a & 0x00FF0000)>>8 
    | (a & 0x0000FF00)<<8 | (a & 0x000000FF)<<24);
    return 0;
}
#include 
#include 
using namespace std;

int main(int argc, char *argv[])
{
    int a=0x1234; //小端 34 12 
    char c=(char)(a); //判断是大端还是小端,char 强制转换会把高位的地址给去掉
    // int 占4字节,char 占1字节,只保留1字节的数据。 
    if(c == 0x12)
    {
        cout<<"big"<<endl;
    }
    else if(c == 0x34)
    {
        cout<<"small"<<endl;
    }
    // 
    int b=0x00000018;
    cout<<sizeof(b)<//4
    cout<endl;
    printf("%x\n",(b& 0x000000ff)<<24);// b一个16进制由4位二进制表示,24表示向左
    //移6个0 
    // 如果右移或者左移的位数>=该数据的位数
    //  b << 32 // 实际移动的位数= 32 mod 该数据位数 =0 
    //  b >> 36 // 实际移动的位数= 36 mod 该数据位数 =4 
    printf("%x\n",(a & 0xFF000000)>>24 | (a & 0x00FF0000)>>8 
    | (a & 0x0000FF00)<<8 | (a & 0x000000FF)<<24);
    return 0;
}