将char转换为具有特定格式的uint8_t数组C
我想将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(" }");
但是,当然,这是不行的!
你可能想这样的:
#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]);
}
}
他想要一个MAC作为字符串以及:) –
@PeterJ是的,也许questiuon不是很清楚。 –
对不起,不清楚。我使用uint8_t这样的''uint8_t mac [] = {0xe0,0x60,0x66,0x64,0x38,0x7d}''。但是现在(因为原因)这个mac是一个字符串,格式为“e0606664387d”。这个字符串应该转换成''uint8_t mac [] = {0xe0,0x60,0x66,0x64,0x38,0x7d}''所以我可以在我的代码中再次使用它。它必须以“unint8_t''的格式存在。 –
不要使用'sscanf'但提取个人十六进制字符串( “E0”, “60”, “66” 等),并使用变换他们['与strtol '](http://www.cplusplus.com/reference/cstdlib/strtol/)。我应该不超过8行代码。 –
只是注意到:使用'printf'确实不是你需要的东西。 –
目标字符串是否也是字符串格式呢?因为'uint8_t'暗示它应该是原始数据格式?如果它是一个字符串,为什么要使用'uint8_t'? – Lundin