最近のCPUのほとんどはリトルエンディアンかビッグエンディアンでしょうか?
2000年あたり以降に出た
Windows, Mac, Linuxに使われているCPUのほとんどはリトルエンディアンかビッグエンディアンでしょうか?
また、たとえば以下のような方法でエンディアンを調べられると考えていいのでしょうか?(VC++です)
#include <windows.h>
void GetEndian4(char* c){
unsigned __int32 a=0x03020100;
BYTE *b = (BYTE*)&a, i=4;
while (i--) c[i]=b[i];
}
//////////
const char e[4]={};
GetEndian4( const_cast<char*>(e) );
//eが 0,1,2,3 になればリトルエンディアン
//3,2,1,0 になればビッグエンディアン
//PDP-エンディアンだと 2,3,0,1 …のはず
(または2択ならこれだけでも判断可能…?)
short s=1;
printf( *(char*)&s ? "リトルエディアン\n" : "ビッグエディアン\n" );
あとここでもアラインメントの問題が絡みますが、このように
アラインメントが(2のべき乗だとして)大きいであろう方から小さいであろう方にキャストする分には安全で、逆に
sizeof(short) == sizeof(char)*2 として
char c[2]={1,0};
short s=*(short*)&c;
というのは危険な場合がある、ということでしょうか?
また、その場合は
たとえばビッグエンディアンなら
short s=(c[0]<<8)|c[1];
とすればいいでしょうか?