西安做网站app,免费的网站域名查询,电子商务网站策划书3500字,怎么用自己的网站做链轮请阅读【嵌入式开发学习必备专栏 】 文章目录 字符串转数值的函数实现代码实现 字符串转数值的函数实现
背景#xff1a; 实现个函数首先判断是16进制数值字符串还是10进制数值字符串#xff0c;如果是16进制数值字符串就将十六进制字符串转换为数值#xff0c;例如将字符串…请阅读【嵌入式开发学习必备专栏 】 文章目录 字符串转数值的函数实现代码实现 字符串转数值的函数实现
背景 实现个函数首先判断是16进制数值字符串还是10进制数值字符串如果是16进制数值字符串就将十六进制字符串转换为数值例如将字符串0x12345678 转换为数值0x12345678, 这里不使用libc中的函数 。
代码实现
要实现一个这样的函数需要首先检查字符串是否以 0x 或 0X 开头以此判断它是否代表一个十六进制数值。如果是将从第三个字符开始跳过 0x逐个字符将十六进制数转换为数值。如果不是假设它是一个十进制字符串并以相似的方式进行转换但这里的基数是10。下面是一个简单的实现
#include stdio.h
// 辅助函数将单个十六进制字符转换为其数值
unsigned char hexCharToValue(char c)
{if (c 0 c 9) return c - 0;if (c a c f) return 10 c - a;if (c A c F) return 10 c - A;return 0; // 对于非十六进制字符统一返回0实际使用时可能要处理错误或异常情况
}
// 辅助函数将单个十进制字符转换为其数值
unsigned char decCharToValue(char c)
{if (c 0 c 9) return c - 0;return 0; // 对于非数字字符统一返回0实际使用时可能要处理错误或异常情况
}
// 主函数判断是十六进制还是十进制并转换
unsigned int strToValue(const char *str)
{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;
}这段代码的核心在于 strToValue 函数它首先判断输入字符串是否为十六进制形式检查前缀 “0x” 或 “0X”然后根据判断结果使用不同的基数10或16和字符转换逻辑hexCharToValue 或 decCharToValue来逐个处理字符串中的字符最终获得数值结果。
请注意这里的实现忽略了错误处理例如当遇到了非法的十六进制或十进制字符时。在实际应用中可能需要增加相应的错误检查逻辑以确保函数的健壮性。