我将通过stm32单片机串口接受到的16进制数据存入数组中,现在想将这些数据转换成10进制该怎么操作啊?求一段代码
我告诉你流程,串口接收的到数据串一般是ASCII码,
1、你要先在数据串中找到你数据组(以标准modbus为例,第一位是地址,第二位是功能码,最后两位是校验码,中间的是数据位,需要把地址,功能码和校验码剔除,剩下的就是数据组A)
2、然后数据组A中的数据ascii码格式转换成16进制,形成新的数据组B
3、数据组B中的数据进行拼接,注意高低位的顺序,B组中的高位*H100,记为B1,B组中的低位记为B2,然后相加得到数据C(单个),C=B1+B2
4、这个数据C就是你需要的数,原始数据是16进制,你显示的时候用10进制就可以了,不需要转换。
收到的是 "89ABCDEF" 这样的 十六进制字符串吗? 也就是把 "AB" 代表的是 0xAB,"12" 代表的是:0x12
1.你参考一下1L说的话,STM32没有十进制或十六进制的概念,
2.假设你通过串口传输了1个数据0x64(你认为的十六进制),实际上就是他就是十进制的100。你通过printf打印也好,进行其他计算也好他就是十进制100。不需要转换
在嵌入式领域看,其实就是同一个数据,不用转换。又不是上位机之类的高级语言。
sprintf(buf,"%d",numper);
其实我怀疑根本就没什么可转换的。很多初学者经常犯的超低级概念性错误。
数据并不存在什么二进制,十进制,十六进制的说法,只有整形,浮点型之类的类型。只有把数值显示出来的时候,才有进制的说法,也就是说,只有字符串(而且是数值转换成的字符串),才有所谓进制的说法。一个普通变量,你在代码里赋值十进制的10,或者十六进制的0xa,是一样的,这个根本不需要转换。
比如"01 03"两个16进制数转换成10进制数就是0*(16^3)+1*(16^2)+0*(16^1)+3*(16^0)=259(10进制)