Je cherche à construire une chaîne binaire composée de valeurs hexadécimales ... J'ai appris que sprintf n'est pas la bonne façon d'accomplir cela. J'ai un vrai gui simple pour collecter les paramètres de configuration qui doivent être envoyés à un périphérique. Les valeurs peuvent être signées et seront toujours numériques. J'ai un ensemble de valeurs telles que:C - créer un paquet en utilisant char et int
#define PKTHEAD 0xA5
#define VALONE 0xA0
#define VALTWO 0xA1
#define VALTHREE 0xA2
#define PKTTAIL 0x5A
signed int val1 = 10000; //0x2710
signed int val2 = -84; //0xFFAC
signed int val3 = -175001 //0xFFFD5467
Mon objectif final est d'avoir un paquet qui ressemblerait « PKTHEAD | PKTHEAD | PKTHEAD | Valone | val1 | VALTWO | val2 | VALTHREE | val3 | PKTTAIL | PKTTAIL | PKTTAIL ", et la représentation hexadécimale serait A5A5A5A000002710A1FFFFFFACA2FFFD54675A5A5A.
En ce moment je fais ceci:
int main(int argc, char *argv[])
{
int numBytes = 10;
signed char *tmp;
signed char *pyld;
pyld = calloc(numBytes, sizeof(char));
signed int val1 = 10000; //0x2710
signed int val2 = -84; //0xFFAC
signed int val3 = -175001 //0xFFFD5467
tmp = pyld;
*(tmp + (numBytes - 1)) = DACHEAD;
*(tmp + (numBytes - 2)) = DACHEAD;
*(tmp + (numBytes - 3)) = DACHEAD;
*(tmp + (numBytes - 4)) = VALONE;
*(tmp + (numBytes - 5)) = val1;
printf("payload = %hhx%hhx%hhx%hhx%hx%hx%hhx%hx\n", pyld[9], pyld[8], pyld[7], pyld[6], pyld[5], pyld[4], pyld[3], pyld[2], pyld[1], pyld[0]);
}
La sortie est: « charge utile = a5a5a5a0100a1ffac »
Ma valeur val1 est incorrecte et je me demande s'il y a une meilleure façon de composer ce paquet. Devrais-je faire des changements de bits à la place?
Toute aide est grandement appréciée.
Merci!