C言語 エンディアン + メモリーダンプ、書き直してみた。
とりあえず書き直してみた。
前よりかはマシになったね。
#define MAX_LINE 8void 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とかに変換される仕様やめてほしい・・・