您的位置:首页 > 其它

嵌入式系统开发(一)——常用字符处理函数

2015-08-20 11:02 260 查看
  字符处理在C语言中是很普遍的。我们常常需要把信息从字符串形式转换为内部数据,或者反向转换。那怎么样高效的实现这些常用操作呢?

  下面介绍我经常使用的方法。在头文件中添加如下内容:

#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个基本字符查询功能函数的实现,可以认识到,很多类似的功能和扩展都是可以通过查表来实现的!关于查表的应用,我还有很多篇幅相关。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: