C言語 エンディアン + メモリーダンプ、書き直してみた。

とりあえず書き直してみた。


#define MAX_LINE 8

void memdump(char* addr, int length)
{
int cnt = 0;
int i;
for(i = 0; i < length; i++){
if(MAX_LINE == cnt){
cnt = 0;
printf("\n");
}
printf("%2x\f", *addr);
addr++;
cnt++;
}
printf("\n");
return;
}

void int_endian(char* addr, char* r_addr) {
int i;
for(i = 0; i < sizeof(int); i++){
r_addr[sizeof(int) - (i + 1)] = *(addr + i);
}

return;
}

前よりかはマシになったね。
ついでに言うと、

int main(void)
{
int test = 0x12345678;
int r_addr = 0x00000000;
/* リトルエンディアンを確認 */
memdump( (char*)( (void*)&test), sizeof(test));
/* 変換かけて */
int_endian( ((char*)(void*)&test), (char*)(void*)&r_addr);
/* ビックエンディアンで出力 */
memdump( (char*)(void*)&r_addr, sizeof(test));

return 0;
}

呼び出しが無理やりだけど・・・
バイトオーダーがそれなりに分かると思う。

なんか勝手に*1とかに変換される仕様やめてほしい・・・