【ARM 嵌入式 C 字符串系列 23.6 -- 字符串转数值的函数实现】

今天 738阅读


请阅读【嵌入式开发学习必备专栏 】

【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;
        }
        
VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]