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