嵌入式系统开发(一)——常用字符处理函数
2015-08-20 11:02
260 查看
字符处理在C语言中是很普遍的。我们常常需要把信息从字符串形式转换为内部数据,或者反向转换。那怎么样高效的实现这些常用操作呢?
下面介绍我经常使用的方法。在头文件中添加如下内容:
然后在C文件中加入:
在头文件中提供了5个常用的字符信息查询函数,通过内联(inline)定义。注意,头文件是给C文件包含的,同时被多个C文件包含。所以应该在头文件定义的内联函数前加上static,用来限定该函数的作用域。
static inline bool_t IsHexChar(u8_t c) ;
查询给定字符c是不是一个十六进制数字符。十六进制字符包括:'0'到'9','A'到'F'(或者小写'a'到'f')。
static inline bool_t IsNumericChar(u8_t c);
查询给定字符c是不是一个十进制数字符。十进制字符包括:'0'到'9'。
static inline bool_t IsAlphabetChar(u8_t c) ;
查询给定字符c是不是一个字母(包括大写和小写)。字母包括:'A'到'Z',(或者小写'a'到'z')。
static inline bool_t IsUpperCaseAlphabetChar(u8_t c);
查询给定字符c是不是一个大写字母。字母包括:'A'到'Z'。
static inline bool_t IsLowerCaseAlphabetChar(u8_t c);
查询给定字符c是不是一个小写字母。字母包括:'a'到'z'。
通过这5个基本字符查询功能函数的实现,可以认识到,很多类似的功能和扩展都是可以通过查表来实现的!关于查表的应用,我还有很多篇幅相关。
下面介绍我经常使用的方法。在头文件中添加如下内容:
#include "ftypes.h" extern u8_t const __ascInfoTbl[256]; static inline bool_t IsHexChar(u8_t c) { c = __ascInfoTbl[c]; return ((c & 0x01) != 0); } static inline bool_t IsNumericChar(u8_t c) { c = __ascInfoTbl[c]; return (c == 0x01); } static inline bool_t IsAlphabetChar(u8_t c) { c = __ascInfoTbl[c]; return ((c & 0x02) != 0); } static inline bool_t IsUpperCaseAlphabetChar(u8_t c) { c = __ascInfoTbl[c]; return ((c & 0x06) == 0x02); } static inline bool_t IsLowerCaseAlphabetChar(u8_t c) { c = __ascInfoTbl[c]; return ((c & 0x06) == 0x06); }
然后在C文件中加入:
u8_t const __ascInfoTbl[256] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, };
在头文件中提供了5个常用的字符信息查询函数,通过内联(inline)定义。注意,头文件是给C文件包含的,同时被多个C文件包含。所以应该在头文件定义的内联函数前加上static,用来限定该函数的作用域。
static inline bool_t IsHexChar(u8_t c) ;
查询给定字符c是不是一个十六进制数字符。十六进制字符包括:'0'到'9','A'到'F'(或者小写'a'到'f')。
static inline bool_t IsNumericChar(u8_t c);
查询给定字符c是不是一个十进制数字符。十进制字符包括:'0'到'9'。
static inline bool_t IsAlphabetChar(u8_t c) ;
查询给定字符c是不是一个字母(包括大写和小写)。字母包括:'A'到'Z',(或者小写'a'到'z')。
static inline bool_t IsUpperCaseAlphabetChar(u8_t c);
查询给定字符c是不是一个大写字母。字母包括:'A'到'Z'。
static inline bool_t IsLowerCaseAlphabetChar(u8_t c);
查询给定字符c是不是一个小写字母。字母包括:'a'到'z'。
通过这5个基本字符查询功能函数的实现,可以认识到,很多类似的功能和扩展都是可以通过查表来实现的!关于查表的应用,我还有很多篇幅相关。
相关文章推荐
- jquery click嵌套 事件重复注册 多次执行的问题解决
- OK335xS Linux Qt make: icpc: Command not found
- 桶排序
- Linux多线程技术总结
- 用HOOK来修改API函数的功能(5)-EXE和WDM驱动通信
- MyBatis教程之数据的增删改查和关联数据的查询
- 通过js保存图片到本地
- SpringMVC Service 注解及简单配置文件讲解
- 自定义View常处理的回调函数
- SDL2.0多分屏显示
- error C2039: “ReadHuge”: 不是“CFile”的成员
- 设计模式之Proxy模式
- 关于Java特种兵下册
- 【java开发系列】—— 自定义注解(转)
- HDU 5402 Travelling Salesman Problem (MUT#9 暴力模拟)
- POJ--2289--Jamie's Contact Groups【二分图的多个匹配+二分法答案】
- 云存储上传控件更新日志-Xproer.HttpUploader7
- LC.exe exited with code -1
- Yii2的一些问题
- NoSQL数据库种类