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 のこれらの値を見ると、ショートが必要なのに対し、ロングに変換されていることです。たとえば、 の最後でが に設定され、 に戻ったときにの代わりにを見ると、 になります。*Hi
Input_Messages[0][15]
[0][16]
PACK()
*Lo
62 (003E)
Set_Conditions()
Input_Messages[0][16]
62
4063232 (003E0000)
global Input_Messages[][]
をからint
に変更することでこれを修正できましたunsigned short
が、その際、関数呼び出しなどで他の多くの変更が必要になります。短く、短くとどまります。ある種のキャスティングか何か。
さらに説明が必要な場合はお知らせください。できる限り説明し、関連するコードを投稿しようとしましたが、できる限りの質問に答えます.