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が、その際、関数呼び出しなどで他の多くの変更が必要になります。短く、短くとどまります。ある種のキャスティングか何か。
さらに説明が必要な場合はお知らせください。できる限り説明し、関連するコードを投稿しようとしましたが、できる限りの質問に答えます.