您现在的位置是:亿华云 > IT科技类资讯
将以逗号为间隔的字符串转为数值
亿华云2025-10-04 02:50:23【IT科技类资讯】6人已围观
简介今天给小伙伴们带来一套实用的代码,可以将用逗号等字符间隔的字符串转换为数值,这个功能还是有一定的应用价值的,需要的小伙伴可以取用哈!阅读过程中有什么问题可以后台交流哈,图片!1 关于函数功能的说明1)
今天给小伙伴们带来一套实用的将逗间隔代码,可以将用逗号等字符间隔的符串字符串转换为数值,这个功能还是数值有一定的应用价值的,需要的将逗间隔小伙伴可以取用哈!
阅读过程中有什么问题可以后台交流哈,图片!
1 关于函数功能的符串说明
1)主要函数介绍
主要函数如下:
① 求m的n次方,拼接数值时用到10的数值n次方。站群服务器
② 找到逗号的将逗间隔位置函数。
③ 字符转数值函数。符串
2)函数功能说明
代码只是数值实现了将字符转数值,将转换结果打印,将逗间隔小伙伴们在实际使用时可以根据自己需要进行改造。符串
代码可以指定保留小数点的数值位数,Str2Num函数中参数dx并没有起到多大效用。将逗间隔
2 实例代码
1)实例代码
说明都在代码注释中了。符串
#include <stdio.h> #include <stdlib.h> #include <stdint.h> #include <string.h> /* 求m的数值n次方 */ uint32_t Pow(uint8_t m,uint8_t n) { uint32_t result = 1; while(n--) { result *= m; } return result; } /* buf中获得第comma个都号的位置 */ uint8_t Comma_Pos(uint8_t *buf,uint8_t comma) { uint8_t *p = buf; while(comma) { // 遇到*或者非法字符,则不存在第cx个逗号 if(*buf == * || *buf < || *buf > z) { return 0xFF; } if(*buf == ,) // 找到逗号调整逗号数量 { comma--; } buf++; } return buf-p; // 移动了多少次,服务器托管就是逗号的位置数 } /* 将字符串转为数值 */ uint32_t Str2Num(uint8_t *buf,uint8_t *dx) { uint8_t *p = buf; uint32_t ires = 0,fres = 0; uint8_t ilen = 0,flen = 0, i; // ilen为整数部分长度,flen为小数部分长度 uint8_t mask = 0; int res; //得到整数和小数的长度 while(1) { if(*p == -) //是负数 { mask |= 0x02; p++; } if(*p == ,||(*p == *)) //遇到结束了,以逗号或星号为结束符 { break; } if(*p == .) //遇到小数点了 { mask |= 0x01; p++; } else if( (*p > 9) || (*p < 0) ) //有非法字符 { ilen = 0; flen = 0; break; } if(mask & 0x01) { flen++; // 遇到小数点则flen小数长度加1 } else { ilen++; // 否则整数长度ilen加1 } p++; // 指向缓冲下个位置 } if(mask & 0x02) //去掉负号 { buf++; } //得到整数部分数据 for(i = 0; i < ilen; i++) { ires += Pow(10, ilen-1-i) * (buf[i] - 0); // buf[0]为最高位数 } if(flen > 3) //最多取3位小数 { flen = 3; } //小数点位数 *dx = flen; //得到小数部分数据 for(i = 0; i < flen; i++) { fres += Pow(10, flen-1-i) * (buf[ilen+1+i] - 0); } // 获取完整数据 = 将整数部分*10的小数长度次方 + 小数部分 res = ires * Pow(10,flen) + fres; if(mask & 0x02) // 如果是负数,给数据加上负号 { res=-res; } return res; } int main(int argc, char *argv[]) { uint8_t i; char ch[100]; uint32_t tmp[3],pos,posx; // 最多取3位小数,第一个数小数只取641 strcpy(ch,"-248.6413,148.64,28.64,22.11,"); /* 将4个字符串转数值并打印 */ for(i = 0; i < 4; i++) { posx = Comma_Pos(ch, i); tmp[i] = Str2Num(ch + posx, &pos); printf("The value %d is: %d\n", i+1, tmp[i]); } return 0; }2)运行结果
本文转载自微信公众号「嵌入式杂牌军」,作者釜薪君。转载本文请联系嵌入式杂牌军公众号。
很赞哦!(14)
相关文章
- 在此期间,他们每天仍在这里卖大米,在理财方面个人感情有待提高。因为现在是收米的最佳时机。
- 软件开发人员如何提升自己的架构设计能力?
- 新手怎样避免在注册域名时入坑?
- 企业域名申请的费用是多少?需要多少材料?
- 评估域名涉及的行业规模与发展状况成正比。
- 怎么样评定域名的价值?域名估价你了解多少?
- 杂米域名中最具性价比的域名是哪类?
- 我,一个靠 GitHub 打赏谋生的程序员,如何做到年入 10 万美元?
- 公司名字不但要与其经营理念、活动识别相统一,还要能反映公司理念,服务宗旨、商品形象,从而才能使人看到或听到公司的名称就能产生愉快的联想,对商店产生好感。这样有助于公司树立良好的形象。
- 企业用vip域名建站,影响流量吗?