假设我有一个函数,其中两个参数是全局数组。代码看起来像这样:
/*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()
后,它会将*Lo
和*Hi
的值分别返回到Input_Messages[0][15]
和[0][16]
。我在big endian机器上遇到的问题是,在完成所有这些操作之后,如果你查看Input_Messages的那些值,它们已被转换为long,而我需要一个short。一个例子是,如果在PACK()
的末尾,*Lo
设置为62 (003E)
,当它返回Set_Conditions()
时,如果您查看Input_Messages[0][16]
,而不是62
,它将是4063232 (003E0000)
。
我设法通过将global Input_Messages[][]
从int
更改为unsigned short
来解决此问题,但在此过程中,函数调用等需要进行大量其他更改。我猜我试图看看是否有一种更简单的方法来设置它,所以它返回为短,并保持简短。某种铸造或某种东西。
如果需要更多解释,请告诉我。我试图尽可能地解释它,并发布相关代码,但我会回答任何问题。