判斷機器是小端的還是大端的:
#include <stdio.h>
//判斷機器是否爲小端存儲
//方法一
bool isLowStore()
{
int a = 0x01;
char *p = (char*)&a;//獲得a的低位字節內容
if(*p)//是1則爲小端存儲
return true;
else
return false;
}
typedef union
{
char c;
int a;
}U;//聯合體中的內容是共用一段內存的,聯合體對象內存的大小就是其成員中所佔內存最大的類型的那個成員的大小
//方法二
bool isLowStore2()
{
U u;
u.a = 0x01;
if(1 == u.c)
return true;
else
return false;
}
void main()
{
if(isLowStore2())
printf("是小端存儲\n");
else
printf("是大端存儲\n");
}
改變數據的存儲模式,如將一個整數的大端存儲模式改爲小端存儲模式或將一個整數的小端存儲模式改爲大端存儲模式
做法就是,用一個臨時變量反序存儲參數中的內容,然後將這個變量再賦值給原參數,可以用引用,這樣就可以改變原參數的值。
·具體實現就是定義一個temp=0變量,然後將參數x從低到高的字節依次或上temp,最後讓參數x = temp就完成了。因爲參數是傳遞的引用,所以改變參數的值會改變原始傳遞給參數的變量的值。
實現代碼如下:
#include <stdio.h>
//改變數據的存儲模式,如將一個整數的大端存儲模式改爲小端存儲模式
/*其實總體思想就是定義一個temp=0變量,然後將x從低到高的字節依次或上temp,
最後讓x = temp就完成了。因爲參數是傳遞的引用,所以改變參數的值會改變原始傳遞給參數的變量的值。
*/
void changeStoreType(int &x)
{
int shirft = sizeof(int)*8 - 8;
int temp = 0;
char *p = (char*)&x;//讓字符指針p依次移動一個字節來獲取參數x的每個字節
int i;
for(i=0; i<sizeof(int); i++)
{
temp |= (*p)<<shirft;
p++;
shirft -= 8;
}
x = temp;
}
void main()
{
int x = 0x12345678;
printf("%x\n",x);
changeStoreType(x);
printf("%x\n",x);
}