2012-03-25 37 views
2

我已經提取了一個MAC地址到char*數組中,使得數組的每一部分都是一對char值。在C中,如何將char *轉換爲十六進制

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

基本上我需要採取的字符數組,並將它們轉換成無符號的字符,使得十六進制表示相同的原始char值。

a1 in ascii -> 0xa1 

在C中將char *轉換爲十六進制的最佳方法是什麼?

+0

看到這個答案https://stackoverflow.com/a/46586095/5842403 – Joniale 2017-10-05 12:53:05

回答

8

我的C不是最好的,但這個工程採用strtol(啓動,[停止],基地)

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

int main(char ** argv, int argc) { 
    char * input = "a1"; 
    printf("%d\n", (unsigned char)strtol(input, NULL, 16)); 
} 
+0

@lnafziger AFAIK NULL是定義爲0,我剛開始找不到它,正在尋找null! – Adam 2012-03-25 04:28:51

+0

我可能應該刪除我的答案,但是在大多數'stdlib.h'中,定義了atoi'','NULL'被轉換爲'char **' – forivall 2012-03-25 04:32:08

+0

。謝謝! – 2012-03-25 04:35:26

1

您可以使用sscanf的用於這一目的。

int mac_byte; 
unsigned char byte; 
sscanf(mac[0],"%x",&mac_byte); 
byte = mac_byte & 0xFF; 
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); 
} 

我在回答慢...

+0

這也是正確的答案。剛剛看到另一個。 – 2012-03-25 04:41:12

+0

是的,他在我做之前提交... – forivall 2012-03-25 04:42:35

相關問題