我如何将MAC字符串(如“ 5D:41:8F:32:34:H2”)转换为字节数组,如{0x5D,0x41、0x8F,0x32、0x34、0xH2}
我正在使用Arduino WOL库,它需要MAC将其作为字节数组传递,但是我将它们保留为以“:”分隔的字符串,而且我不知道该如何完成转换。
如果您尝试尝试,我无法提供更多细节,因为我什至不知道从哪里开始尝试。
void arrancarPC(String strMac) {
byte mac[] = {0x5D, 0x41, 0x8F, 0x32, 0x34, 0xH2};
WakeOnLan::sendWOL(broadcast_ip, UDP, mac, sizeof mac);
}
答案 0 :(得分:0)
数组中的字节必须相反,然后打印。 H2不是有效的十六进制值。
void str2mac(const char* str, uint8_t* mac) {
char buffer[20];
strcpy(buffer, str);
const char* delims = ":";
char* tok = strtok(buffer, delims);
for (int i = 5; i >= 0; i--) {
mac[i] = strtol(tok, NULL, 16);
tok = strtok(NULL, delims);
}
}
void setup() {
Serial.begin(115200);
const char* str = "5D:41:8F:32:34:F2";
uint8_t mac[6];
Serial.println(str);
str2mac(str, mac);
for (int i = 5; i >= 0; i--) {
if (i < 5) {
Serial.print(':');
}
Serial.print(mac[i], HEX);
}
Serial.println();
}
void loop() {
}