2017-08-11 240 views
1

我想將char轉換爲特定格式。將char轉換爲具有特定格式的uint8_t數組C

char *hexstring = "e0606664387d"; 

應該是這樣的:

uint8_t mac[] = { 0xe0, 0x60, 0x66, 0x64, 0x38, 0x7d }; 

喜歡的東西:

uint8_t mac[12]; 
char *hexstring = "e0606664387d"; 
mac_filter[0] = "{ "; 

int i; 
for (i = 0; i < (strlen(hexstring)/2); i++) { 
    sscanf(hexstring + 2*i, "%02x ", &mac[i]); 
    if (i < (strlen(hexstring)/2) - 1){ 
     mac[i] = printf("0x%02x, ", mac[i]); 
    } 
    else{ 
     mac[i] = printf("0x%02x", mac[i]); 
    } 
} 

mac[i + 1] = printf(" }"); 

但是,當然,這是不行的!

+1

不要使用'sscanf'但提取個人十六進制字符串( 「E0」, 「60」, 「66」 等),並使用變換他們['與strtol '](http://www.cplusplus.com/reference/cstdlib/strtol/)。我應該不超過8行代碼。 –

+1

只是注意到:使用'printf'確實不是你需要的東西。 –

+0

目標字符串是否也是字符串格式呢?因爲'uint8_t'暗示它應該是原始數據格式?如果它是一個字符串,爲什麼要使用'uint8_t'? – Lundin

回答

0

你可能想這樣的:

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

char *hexstring = "e0606664387d"; 
uint8_t mac[8]; 

int main() 
{ 
    for (int i = 0; hexstring[i] != 0; i++) 
    { 
    char byte[3]; 
    strncpy(byte, &hexstring[i * 2], 2); // copy 2 characters 
    byte[2] = 0;       // put NUL string terminator 
    mac[i] = strtol(byte, NULL, 16);  // convert string such as "e0" to 0xe0 
    } 

    // display the mac array 

    for (int i = 0; i < sizeof(mac)/sizeof(mac[0]); i++) 
    { 
    printf("%02x\n", mac[i]); 
    } 
} 
+0

他想要一個MAC作爲字符串以及:) –

+0

@PeterJ是的,也許questiuon不是很清楚。 –

+0

對不起,不清楚。我使用uint8_t這樣的''uint8_t mac [] = {0xe0,0x60,0x66,0x64,0x38,0x7d}''。但是現在(因爲原因)這個mac是一個字符串,格式爲「e0606664387d」。這個字符串應該轉換成''uint8_t mac [] = {0xe0,0x60,0x66,0x64,0x38,0x7d}''所以我可以在我的代碼中再次使用它。它必須以「unint8_t''的格式存在。 –