Как я могу преобразовать строку MAC в байтовый массив? - PullRequest
0 голосов
/ 02 июля 2019

Как я могу преобразовать строку MAC, например «5D: 41: 8F: 32: 34: H2», в байтовый массив, например {0x5D, 0x41, 0x8F, 0x32, 0x34, 0xH2}

I 'Я использую библиотеку Arduino WOL, и она требует, чтобы MAC передавал ее как массив байтов, но я держу их в виде строк, разделенных символом «:», и я понятия не имею, как можно выполнить это преобразование.

Iне могу поставить больше деталей, если попробуешь, потому что даже не знаю с чего начать пытаться.

void arrancarPC(String strMac) {
  byte mac[] = {0x5D, 0x41, 0x8F, 0x32, 0x34, 0xH2};
  WakeOnLan::sendWOL(broadcast_ip, UDP, mac, sizeof mac);
}

1 Ответ

0 голосов
/ 03 июля 2019

байты в массиве должны быть в обратном порядке, а затем печататься.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() {

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...