J'ai pris l'argument de la fonction comme char *, dans mon cas, j'ai XOR égal à 210. De l'autre côté, dans l'autre VS j'ai pris le premier argument pas char * mais simplement char [] et le XOR est 114, ce qui est correct.char * et char [] n'obtiennent pas la même sortie
Qu'est-ce qui ne va pas? pourquoi je ne peux pas obtenir la même chose ici?
merci pour vos réponses.
MISE À JOUR: Vous avez raison. sprintf() fonctionne bien. Le problème est le reste du code.
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;
}
Résolu: Oui, j'ai oublié d'initialiser XOR.
Puisque vous ajoutez 65536 (0x10000) à votre petit nombre, comment le troisième chiffre hexadécimal pourrait-il être autre chose que 1? La sortie 'sprintf' de Linux semble correcte (sauf que vous n'affichez pas la valeur exacte de' iAzimuthAngle'). – user4815162342
Comment appelez-vous sprintf avec un seul caractère au lieu de char * sans avoir une erreur de compilation? En outre, hex 96 est 150, pas 15. – riv
Pouvez-vous poster un exemple complet, compilable, qui ne se comporte pas comme vous l'attendez, avec vos attentes? – user4815162342