我如何将MAC字符串转换为字节数组?

时间:2019-07-02 09:19:38

标签: arduino

我如何将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);
}

1 个答案:

答案 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() {

}