# MI_SwapEndian*

## 構文

      #include <nitro/mi.h>

      #define MI_SwapEndian8(val)  (u8)(val)
      #define MI_SwapEndian16(val) (u16)((((val) & 0xFF00UL) >> 8UL) | (((val) & 0x00FFUL) << 8UL))
      #define MI_SwapEndian32(val) (u32)(                                 \
                                      (((val) & 0xFF000000UL) >> 24UL) |  \
                                      (((val) & 0x00FF0000UL) >>  8UL) |  \
                                      (((val) & 0x0000FF00UL) <<  8UL) |  \
                                      (((val) & 0x000000FFUL) << 24UL) )
      #define MI_SwapEndian64(val) (u64)(                                         \
                                    (((val) & 0xFF00000000000000ULL) >> 56ULL)    \
                                  | (((val) & 0x00FF000000000000ULL) >> 40ULL)    \
                                  | (((val) & 0x0000FF0000000000ULL) >> 24ULL)    \
                                  | (((val) & 0x000000FF00000000ULL) >>  8ULL)    \
                                  | (((val) & 0x00000000FF000000ULL) <<  8ULL)    \
                                  | (((val) & 0x0000000000FF0000ULL) << 24ULL)    \
                                  | (((val) & 0x000000000000FF00ULL) << 40ULL)    \
                                  | (((val) & 0x00000000000000FFULL) << 56ULL) )

## 引数

val | エンディアンを変換する値 マクロのため、複数回評価される点に注意してください。

## 返り値

エンディアンを変換した値(`u16,u32,u64`)

## 説明

指定された(16,32,64)bit 値のエンディアンを変換します。変換前をリトルエンディアンとみなせば変換後はビッグエンディアンになります。
マクロのため、引数が複数回評価される点に注意してください。

これらのうち8bit版は実際には何の変換も行いませんが、 ソースコードの視認性を統一するために用意されています。

## 参照

`MI_Load*, MI_Store*, MI_HTo*, MI_*ToH*`

## 履歴

2007/11/21 64bit版の記述を追加
2006/06/13 8bit版の記述を追加
2006/04/05 初版