Hex Char Array zu Byte Array

Ich bekomme über JSON ein String der Mac-Adresse der sich wie folgt darstellt.

E09806B50569

Ich würde dies gern in einem Byte Array (z.B. Mac[6];) speichern. Also 6 Bytes.

  1. Byte wäre E0 was 224 entspricht.
  2. Byte wäre 98 was 152 entspricht.
  3. Byte wäre 06 was 6 entspricht.
  4. Byte wäre B5 was 181 entspricht.
  5. Byte wäre 05 was 5 entspricht.
  6. Byte wäre 69 was 105 entspricht.

Wie gehe ich das am besten an? Den String in 6 Teile zerlegen. Aber wie wandel ich 'E0' zu 224?

Danke

Eigentlich ist das nicht schwer.

Aber es gibt ja noch sscanf() und seine Brüder, welche dir gerne die Arbeit abnehmen

uint8_t nibble2bin(char c){
   c im Bereich '0' bis '9' -> nibble = c - '0'
   c im Bereich 'A' bis 'F' -> nibble = c - 'A' + 10
   c im Bereich 'a' bis 'f' -> nibble = c - 'a' + 10
  return nibble
}

char s[] = "E09806B50569"
Mac[0] = nibble2bin(s[0]) * 16 + nibble2bin(s[1])
Mac[1] = nibble2bin(s[2]) * 16 + nibble2bin(s[3])
...
1 Like

Herzlichen Dank. Du hast Recht, gar nicht so schwer, wenn man diese Funktion kennt.

const char* str = "E09806B50569";
unsigned int Mac[6];

void setup() {
  delay(1000);
  Serial.begin(115200);
  sscanf(str,"%02x%02x%02x%02x%02x%02x", &Mac[0], &Mac[1], &Mac[2], &Mac[3], &Mac[4], &Mac[5]);
  Serial.printf("Byte1: %u\nByte2: %u\nByte3: %u\nByte4: %u\nByte5: %u\nByte6: %u\n\n", Mac[0], Mac[1], Mac[2], Mac[3], Mac[4], Mac[5]);
  Serial.printf("Mac: %02X:%02X:%02X:%02X:%02X:%02X\n", Mac[0], Mac[1], Mac[2], Mac[3], Mac[4], Mac[5]);
}

void loop() {
}

Stolperstein war noch, das ich Mac vom Typ Byte beim ESP8266 probiert habe. Dies konntet ihr aber nicht wissen.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.