2008年8月11日月曜日

インディアン襲来

Windowsではリトルエンディアン。
これで長い時間悩まされたので…

int型をchar型の配列にキャストして演算しているソースがあり

めっちゃ混乱させられました。
以下のソースを実行させてみてください。
結果がわかると思います。
--------------------------
#include

void print(int d, void* bcd){

char* p = (char*)bcd;
int i = 0;
int n = d>>1;
for(i = 0; i< n; ++i) {
printf("%x,",p[i]);
}
}

int main(void) {
int work = 0x12345678;
print(8,&work);
return 1;
}
--------------------------

Windows環境やと。
78,56,34,12
って表示されます。

引数で渡している型と関数内でキャストしている型が違うってどないやねん!
こんな難しいソース書くなといいたいですね…

.

ラベル