В C, Как конвертировать char * в hex - PullRequest
2 голосов
/ 25 марта 2012

Я извлек MAC-адрес в массив char*, так что каждый раздел массива представляет собой пару значений char.

mac[0] = "a1"
mac[1] = "b2"
...
mac[5] = "f6"

В основном мне нужно взять массивы char и преобразовать их всимвол без знака, такой, что шестнадцатеричное представление совпадает с исходными значениями символов.

a1 in ascii -> 0xa1

Каков наилучший способ преобразования символа * в шестнадцатеричное в C?

Ответы [ 3 ]

8 голосов
/ 25 марта 2012

Мой C не самый лучший, но он работает с использованием strtol (start, [stop], base)

#include <stdlib.h>
#include <stdio.h>

int main(char ** argv, int argc) {
  char * input = "a1";
  printf("%d\n", (unsigned char)strtol(input, NULL, 16));
}
2 голосов
/ 25 марта 2012
#include <stdlib.h>
#include <stdio.h>

unsigned char mac_uchar[6];

for(i = 0;i < 6; ++i) {
    mac_uchar = (unsigned char) strtol (&mac[n], (char **) NULL, 16);
}

Я медленно отвечал ...

1 голос
/ 25 марта 2012

Вы можете использовать sscanf для этой цели.

int mac_byte;
unsigned char byte;
sscanf(mac[0],"%x",&mac_byte);
byte = mac_byte & 0xFF;
...