查找字符串数组中16进制数,并转换【原创】

简介: 查找字符串数组中16进制数,并转换 #include #include #include void string_to_hex(unsigned char* input, int input_len, unsigned char* output, int output_l...

 

查找字符串数组中16进制数,并转换


#include <stdio.h> #include <stdlib.h> #include <string.h> void string_to_hex(unsigned char* input, int input_len, unsigned char* output, int output_len) { unsigned char tmp; int i; if (input_len > output_len*2) return; for (i = 0; i < input_len; i += 2){ tmp = input[i]; if (tmp > '9'){ tmp = (unsigned char)toupper((int)tmp) - 'A' + 0x0A; } else { tmp &= 0x0F; } output[i/2] = (tmp << 4); tmp = input[i+1]; if (tmp > '9'){ tmp = (unsigned char)toupper((int)tmp) - 'A' + 0x0A; } else { tmp &= 0x0F; } output[i/2] |= tmp; } } #define GTP_CONFIG_MAX_LENGTH 240 int main(void) { char *fw_image = "0xfd,120x03fg 0x44 ,,0x56dff g0x23,,a0x34"; int size = 0; int i = 0; char temp_data[GTP_CONFIG_MAX_LENGTH] = { 0 }; char *endp = NULL; int find_data = 0; int j = 0; memset(temp_data, 0, strlen(temp_data)); j = 0; size = strlen(fw_image); printf("size=%d \r\n", size); for (i = 0; i < size; i++) { if (fw_image[i] == '0' && find_data == 0) { find_data = 1; printf("[%d]%c find_data == 0 no\r\n", i, fw_image[i]); continue; } if ((fw_image[i] == 'x' || fw_image[i] == 'X') && find_data == 1) { find_data = 2; printf("[%d]%c find_data == 1 no\r\n", i, fw_image[i]); } else if (find_data == 2) { printf("[%d]%c find_data == 2\r\n", i, fw_image[i]); printf("[%d]%c find_data == 2\r\n", i, fw_image[i-2]); //temp_data[j] = strtoul(&fw_image[i-2], NULL, 16); string_to_hex(&fw_image[i], 2, &temp_data[j], 2); printf("temp_data[%d]=0x%02x yes\r\n", j, temp_data[j]); find_data = 0; j++; } else { find_data = 0; printf("[%d]%c find_data == 0 no\r\n", i, fw_image[i]); } } printf("j=%d \r\n", j); for (i = 0; i < j; i++) { printf("[%d]%02x ", i, temp_data[i] & 0xff); if (i % 10 == 9) printf("\n"); } #if 0 // string_to_hex(buf, 5, tmp, 5); tmp[0] = strtoul(buf, &endp, 16); tmp[1] = strtoul(&buf[5], &endp, 16); tmp[2] = strtoul(&buf[11], &endp, 16); for (i=0; i<5; i++) printf("tmp[%d]=%02x ", i, tmp[i]); #endif printf("\n"); return 0; }

 

【作者】 张昺华
【新浪微博】 张昺华--sky
【twitter】 @sky2030_
【facebook】 张昺华 zhangbinghua
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
目录
相关文章
|
编解码 Java 编译器
【Protobuf】Protobuf中的Message语法规范
在Message中定义一个或者多个字段,FieldType是字段的数据类型,可以是基本类型(如int32、string、bool等)或其他定义的Message类型。fieldName是字段的名称,可以根据需求自定义。fieldNumber是字段的唯一标识号,用于在消息的二进制编码中标识字段。
872 0
|
1月前
|
存储 关系型数据库 MySQL
MySQL中的int(10)、char(10)与varchar(10)的类型和区别
在选择正确的数据类型时,需要仔细考虑每列的数据特点及应用程序的使用情况。合理的数据类型选择可以优化存储空间的使用,提高查询速度和数据库的整体性能。
259 14
|
负载均衡 容灾 关系型数据库
mysql主从复制
mysql主从复制
882 1
|
消息中间件 安全 Java
云消息队列RabbitMQ实践解决方案评测
一文带你详细了解云消息队列RabbitMQ实践的解决方案优与劣
322 117
|
11月前
|
机器学习/深度学习 人工智能 搜索推荐
探索人工智能在医疗健康领域的最新进展与未来展望
探索人工智能在医疗健康领域的最新进展与未来展望
594 12
|
SQL Java 数据库连接
mybatis使用二:springboot 整合 mybatis,创建开发环境
这篇文章介绍了如何在SpringBoot项目中整合Mybatis和MybatisGenerator,包括添加依赖、配置数据源、修改启动主类、编写Java代码,以及使用Postman进行接口测试。
243 0
mybatis使用二:springboot 整合 mybatis,创建开发环境
|
11月前
|
存储 关系型数据库 数据库
PostGIS简介
PostGIS是PostgreSQL的扩展插件,增强其处理地理空间数据的能力,支持空间数据存储、索引、查询及分析等功能。它适用于2D和3D空间数据,提供多种几何类型和栅格数据支持,兼容多种第三方工具。安装需先配置EPEL和PowerTools仓库,然后通过DNF安装PostGIS包,并在目标数据库中启用扩展。PostGIS支持geometry、geography和raster等数据类型,适用于不同场景的空间数据分析。
639 0
|
存储 C++
C++ enable_shared_from_this
`std::enable_shared_from_this&lt;&gt;` 是 C++11 引入的模板类,用于安全地在类中创建 `std::shared_ptr` 实例。它解决了成员函数中直接创建 `std::shared_ptr` 导致的对象多次销毁和未定义行为问题。通过继承 `std::enable_shared_from_this&lt;&gt;` 并调用 `shared_from_this()` 方法,可以在类的成员函数中安全地获取当前对象的 `std::shared_ptr`。
|
消息中间件 API
【FreeRTOS(二)】FreeRTOS新手入门——计数型信号量和二进制信号量的基本使用并附代码解析
【FreeRTOS(二)】FreeRTOS新手入门——计数型信号量和二进制信号量的基本使用并附代码解析
|
JavaScript
video-08-videojs黑屏问题(详解总结)
video-08-videojs黑屏问题(详解总结)
668 1