一个非常强大的字符串函数sscanf

GIT百度天宫的代码

D:\GKOSON_BACK_GARDEN\repository\BAIDU-SDK-GIT\iot-edge-sdk-samples\ota\esp32_baidu_ota_demo\main\libota

看到一个函数:

static void hex_to_decimal(const char *hex_string, unsigned char *arr, size_t arr_len)
{
    const char *pos = hex_string;
    int count;

    for (count = 0; count < arr_len; count++) {
        sscanf(pos, "%2hhx", &arr[count]);
        pos += 2;
    }
}

非常震撼!

测试:

#include 

 
 static void hex_to_decimal(const char *hex_string, unsigned char *arr, size_t arr_len)
{
    const char *pos = hex_string;
    int count;

    for (count = 0; count < arr_len; count++) {
        sscanf(pos, "%2hhx", &arr[count]);
        pos += 2;
    }
}
void show(void *Arr,char len)
{
	char *arr=(char *)Arr;
	for(char i=0;i

31-32-33-34-35-36-00-00-00-00-
12-34-56-00-00-00-00-00-00-00-
[Finished in 1.0s]

它的作用是把字符串“123456”---》0X12 0X34 0X56这样!!!

 

说明:

1--我可以成功 别人可能需要#include

2-- 其实是printf的故事

"%02x",是以0补齐2位数,如果超过2位就显示实际的数;
"%hhx" 是只输出2位数,即便超了,也只显示低两位;
 
因此有了"%02hhx"

也就是 

 static void hex_to_decimal(const char *hex_string, unsigned char *arr, size_t arr_len)
{
    const char *pos = hex_string;
    int count;

    for (count = 0; count < arr_len; count++) {
        sscanf(pos, "%2d", &arr[count]);//------------只需要修改这里就是“123456”---》12 34 56这样!!!
        pos += 2;
    }
}

3--WHY

#include 


int main(int argc,char **argv)
{
	int i, idx = 0;
    char str[20];
    sscanf("aaa bbb ccc", "%*s %s%n", str, &idx);
    printf("%s\n%d\n", str, idx);
    return 0;
}

你可能感兴趣的:(一个非常强大的字符串函数sscanf)