Plumps
October 16, 2024, 7:54pm
1
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.
Byte wäre E0 was 224 entspricht.
Byte wäre 98 was 152 entspricht.
Byte wäre 06 was 6 entspricht.
Byte wäre B5 was 181 entspricht.
Byte wäre 05 was 5 entspricht.
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
combie
October 16, 2024, 8:04pm
2
Eigentlich ist das nicht schwer.
Aber es gibt ja noch sscanf() und seine Brüder, welche dir gerne die Arbeit abnehmen
Rintin
October 16, 2024, 9:03pm
3
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
Plumps
October 17, 2024, 4:10am
4
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.
system
Closed
April 15, 2025, 4:10am
5
This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.