【ARM 嵌入式 C 字符串系列 23.6 -- 字符串转数值的函数实现】
请阅读【嵌入式开发学习必备专栏 】
(图片来源网络,侵删)
文章目录
- 字符串转数值的函数实现
- 代码实现
字符串转数值的函数实现
背景:
实现个函数首先判断是16进制数值字符串还是10进制数值字符串,如果是16进制数值字符串就将十六进制字符串转换为数值,例如将字符串"0x12345678" 转换为数值0x12345678, 这里不使用libc中的函数 。
代码实现
要实现一个这样的函数,需要首先检查字符串是否以 "0x" 或 "0X" 开头,以此判断它是否代表一个十六进制数值。如果是,将从第三个字符开始(跳过 "0x"),逐个字符将十六进制数转换为数值。如果不是,假设它是一个十进制字符串,并以相似的方式进行转换,但这里的基数是10。下面是一个简单的实现:
#include // 辅助函数:将单个十六进制字符转换为其数值 unsigned char hexCharToValue(char c) { if (c >= '0' && c = 'a' && c = 'A' && c if (c = '0' && c unsigned int result = 0; int base = 10; // 默认为十进制 // 检查是否为十六进制 if (str[0] == '0' && (str[1] == 'x' || str[1] == 'X')) { base = 16; str += 2; // 跳过 "0x" } while (*str) { if (base == 16) { result = result * base + hexCharToValue(*str); } else { result = result * base + decCharToValue(*str); } str++; } return result; } int main(void) { // 测试用例 printf("十六进制 '0x12345678' 转换结果:%u\n", strToValue("0x12345678")); printf("十进制 '12345678' 转换结果:%u\n", strToValue("12345678")); return 0; }
- 代码实现
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。