一个非常强大的字符串函数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 <stdio.h>

 
 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<len;i++)printf("%02X-",arr[i] );
		printf("\n");
}
int main(int argc,char **argv)
{
	char hex_string[100]="123456";
	unsigned char arr[100]={0};
	hex_to_decimal(hex_string,arr,6);
 	show(hex_string,10 );
 	show(arr,10 );
	return 1;
}

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 <stdlib.h>

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 <stdio.h>


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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值