在C中,如何将char *转换为十六进制

时间:2012-03-25 04:15:37

标签: c char hex

我已将MAC地址提取到char*数组中,这样数组的每个部分都是一对char值。

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

基本上我需要获取char数组并将它们转换为unsigned char,这样十六进制表示与原始char值相同。

a1 in ascii -> 0xa1

在C中将char *转换为十六进制的最佳方法是什么?

3 个答案:

答案 0 :(得分:8)

我的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));
}

答案 1 :(得分:2)

#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);
}

我回答得很慢......

答案 2 :(得分:1)

您可以将sscanf用于此目的。

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