我把函數參數當作char *,在我的例子中我得到XOR等於210.另一方面,在另一個VS中,我把第一個參數不是char *但只是char []和XOR是114,這是正確的。char *和char []得不到相同的輸出
有什麼不對?爲什麼我不能在這裏得到同樣的東西?
感謝您的回覆。
更新:你說得對。 sprintf()工作正常。問題是代碼的其餘部分。
bool BuildAnglePacket(char* WR_PacketAZAngle, float AZAngle)
{
WR_PacketAZAngle[0] = 0x04;
WR_PacketAZAngle[1] = 0x30;
WR_PacketAZAngle[2] = 0x31;
WR_PacketAZAngle[3] = 0x02;
WR_PacketAZAngle[4] = 0x79;
WR_PacketAZAngle[5] = 0x4E;
WR_PacketAZAngle[6] = 0x48;
int XOR;
char HAnlge[9];
int iAzimuthAngle;
// AZAngle = 22;
if (AZAngle >= -22.5 && AZAngle <= 22.5)
{
iAzimuthAngle = AZAngle*10;
if(AZAngle < 0)
{
iAzimuthAngle= abs(iAzimuthAngle);
iAzimuthAngle=((~iAzimuthAngle)&0xFFFF) + 1 ;
}
iAzimuthAngle = 65536 + iAzimuthAngle;
sprintf(HAnlge,"%08X", iAzimuthAngle);
WR_PacketAZAngle[7] = HAnlge[0];
WR_PacketAZAngle[8] = HAnlge[1];
WR_PacketAZAngle[9] = HAnlge[2];
WR_PacketAZAngle[10] = HAnlge[3];
WR_PacketAZAngle[11] = HAnlge[4];
WR_PacketAZAngle[12] = HAnlge[5];
WR_PacketAZAngle[13] = HAnlge[6];
WR_PacketAZAngle[14] = HAnlge[7];
WR_PacketAZAngle[15] = 0x03;
for(int i=4;i<16;i++)
XOR ^= WR_PacketAZAngle[i];
WR_PacketAZAngle[16] = XOR;
WR_PacketAZAngle[17] ='\x0';
}
return true;
}
解決:是的,我忘了初始化異或。
由於你正在爲你的小號碼加65536(0x10000),第三個十六進制數字怎麼可能不是1? Linux的'sprintf'輸出顯示正確(除了不顯示'iAzimuthAngle'的確切值)。 – user4815162342
你如何用一個字符而不是char *調用sprintf而不會收到編譯錯誤?此外,十六進制96是150,而不是15. – riv
你能發佈一個完整的,可編譯的,不符合你期望的例子,以及你的期望嗎? – user4815162342