A QNXライブラリはこのエンディアン変換はどのように機能しますか? gfpr.h呼ば
var1 = ENDIAN_LE16(var1);
を次のように(符号なしshort)VAR1のエンディアンを変換するために使用されるライン
#define ENDIAN_LE16(__x) (__x)
を含有します。これはどのように作動しますか? __x
とx__
は、プリプロセッサに特別な意味を持つ必要がありますか?
A QNXライブラリはこのエンディアン変換はどのように機能しますか? gfpr.h呼ば
var1 = ENDIAN_LE16(var1);
を次のように(符号なしshort)VAR1のエンディアンを変換するために使用されるライン
#define ENDIAN_LE16(__x) (__x)
を含有します。これはどのように作動しますか? __x
とx__
は、プリプロセッサに特別な意味を持つ必要がありますか?
__x
は特別な意味を持ちません。 ENDIAN_LE16
は、ソースコードを変更せずにエンディアンを変更できる場所です。各ビルドターゲットは、そのターゲットに固有の異なるバージョンのgfpr.h
を持つことができます。
リトルエンディアンマシン用にコンパイルする必要があります。したがって、ENDIAN_LE16
は変更する必要はありません。その議論(__x
)は変わりません。ビッグエンディアンのターゲット用にコンパイルする場合は、その引数のバイトをスワップするようにENDIAN_LE16
が定義されます。ような何か:
#define ENDIAN_LE16(__x) ((((x) & 0xff) << 8) | (((x) >> 8) & 0xff))
そうすれば、あなたには、ターゲットのgfpr.h
ファイルを変更することで、あなたはあなたのソースコードを変更することなく、右の結果を得ます。
file you're probably looking at当たり編集、ENDIAN_BE32
私が上記示したものと同様のビットをtwiddles ENDIAN_RET32
を呼び出します。