ホームに戻る
 32ビット値のスワップ

#include<stdio.h>

/*
*   リトルエンディアンの場合32ビット値を内部でスワップする。
*   よって結果がエンディアンに左右されない。
*/

int swapW(int w){
  int a = 1;
  int n = 0;
  if(*(char *)&a == 1){
    n += (w >> 24) & 0x000000FF;
    n += (w >> 8) & 0x0000FF00;
    n += (w << 8) & 0x00FF0000;
    n += (w << 24) & 0xFF000000;
    return n;
  }
  else{
    return w;
  }
}

int main(){
  int n = 1;
  char *pch = (char *)&n;

  n = swapW(n);

  printf("%02d ", pch[0]);
  printf("%02d ", pch[1]);
  printf("%02d ", pch[2]);
  printf("%02d ", pch[3]);

  return 0;
}

inserted by FC2 system