1

2 つのパラメーターがグローバル配列である関数があるとします。コードは次のようになります。

/*global variable*/
int    Input_Messages          [Num_Messages ][Num_Elements];

static void Set_Conditions()
{
     PACK(250.0, (unsigned short*)&Input_Messages[0][15], (unsigned short*)&Input_Messages[0][16], 18, 19, -1, 1.0);
}

void PACK(float value, unsigned short *Hi, unsigned short *Lo, long bit, long word, long lsb, float scale)
{
     unsigned long Value32;
     .
     .
     .
     /*last bit of code where *Hi and *Lo are set*/
     *Lo = (unsigned short)(Value32);
     *Hi = ((unsigned short)(((Value32) >> 16) & 0xFFFF));
}

私が直面している問題は次のとおりです。

PACK()が完了すると、 and の値をそれぞれandに*Lo返します。ビッグ エンディアン マシンで発生している問題は、これがすべて完了した後、Input_Messages のこれらの値を見ると、ショートが必要なのに対し、ロングに変換されていることです。たとえば、 の最後でが に設定され、 に戻ったときにの代わりにを見ると、 になります。*HiInput_Messages[0][15][0][16]PACK()*Lo62 (003E)Set_Conditions()Input_Messages[0][16]624063232 (003E0000)

global Input_Messages[][]をからintに変更することでこれを修正できましたunsigned shortが、その際、関数呼び出しなどで他の多くの変更が必要になります。短く、短くとどまります。ある種のキャスティングか何か。

さらに説明が必要な場合はお知らせください。できる限り説明し、関連するコードを投稿しようとしましたが、できる限りの質問に答えます.

4

0 に答える 0