[Résolu]Comment bien comprendre/utiliser les bytes, les doubles et les char

Bon alors voilà un bout de code qui remplit un buffer avec une chaîne et ensuite rajoute une valeur de 4 octets derrière.

uint32_t valeur = 0xDEADBEEF; // une valeur sur 4 octets

const uint8_t tailleMax = 20;
uint8_t data[tailleMax]; // un buffer assez grand

void printData()
{
  Serial.print("data = { ");
  for (byte i = 0; i < tailleMax; i++) {
    Serial.print("0x");
    if (data[i] <= 0xF) Serial.print("0");
    Serial.print(data[i], HEX);
    Serial.print(" ");
  }
  Serial.println("}");
}

void setup() {
  Serial.begin(115200);

  memset(data, 0xFF, tailleMax); // on met le buffer à 0xFF partout (pas nécessaire juste pour montrer, une variable globale sera à 0 la première fois)
  printData();

  strcpy((char *) data, "valeur="); // ici le buffer contient {'v','a','l','e','u','r','=','\0', ....}
  printData();

  uint32_t * ptr = (uint32_t*) (data + strlen((const char*) data)); // on caclule la où mettre les données
  *ptr = valeur; // on met les 4 octets au bon endroit.
  printData();

  uint8_t * ptr1 = ((uint8_t *) ptr) + sizeof(valeur) ; // on cherche la fin
  *ptr1 = 0; // on remet un zéro à la fin
  printData();
}

void loop() {}

ça affiche cela

[sub][color=blue]data = { 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF }
data = { 0x76 0x61 0x6C 0x65 0x75 0x72 0x3D 0x00 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF }
data = { 0x76 0x61 0x6C 0x65 0x75 0x72 0x3D 0xEF 0xBE 0xAD 0xDE 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF }
data = { 0x76 0x61 0x6C 0x65 0x75 0x72 0x3D 0xEF 0xBE 0xAD 0xDE 0x00 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF }
[/color][/sub]

et en image ça donne ça


mais cela dit il faudrait savoir exactement ce que vous devez envoyer... (attention j'ai écrasé le '\0' de fin de chaîne dans mon exemple, peut-être il faut le conserver pour décoder correctement de l'autre côté)


1 Like