在ST的官方例程中,看到几个关于十六进制和ASCII码关系判断和转换方面的宏,我注释了一下,保存下来,供学习、复习、备查。
// 用ASCII表示的十六进制中的大写字符吗?
#define IS_AF(c) ((c >= 'A') && (c <= 'F'))
// 用ASCII表示的十六进制中的小写字符吗?
#define IS_af(c) ((c >= 'a') && (c <= 'f'))
// 用ASCII表示的数字吗?
#define IS_09(c) ((c >= '0') && (c <= '9'))
// 用ASCII表示的有效的十六禁止数吗?
#define ISVALIDHEX(c) IS_AF(c) || IS_af(c) || IS_09(c)
// 用ASCII表示的有效的十进制数吗?
#define ISVALIDDEC(c) IS_09(c)
// ASCII转换为十进制数
#define CONVERTDEC(c) (c - '0')
// 字母(a-f 或 A-F)转换为十六进制数
#define CONVERTHEX_alpha(c) (IS_AF(c) ? (c - 'A'+10) : (c - 'a'+10))
// 字符(0-9 或 a-f 或 A-F)转换为十六进制数
#define CONVERTHEX(c) (IS_09(c) ? (c - '0') : CONVERTHEX_alpha(c))