duanyz 发表于 2018-1-10 14:23:26

紧急求助arduino16进制数转为10进制数的方法

今日得一武汉中显的触摸屏,触摸屏串口返回数据格式是十六进制:A5 5A 08 83 00 24 02 00 00 EA 60

其中最后的EA 06,是要用的变量数据,需要转成十进制来使用,其中两个连起来 EA60=60000。

现在可以通过string的分别读取出了这个EA和06单个的数,但不会把它连起来成EA60,求指教。另连起来又怎么能把他们变成十进制的数呢?


自己也想用笨办法:E*16∧3 + A*16∧2 + 0+6来计算这个数,可是还是不会取出E,A,0,6这些单个数值的方法,求大家指教。

最帅的老饼 发表于 2018-1-10 20:15:12

你的方法没错,但先要把它转成十进制 ,用数组装好 ,然后 vol*1 + vol*10 + vol*100 + vol*1000

Stormer 发表于 2018-1-10 20:20:42

本帖最后由 Stormer 于 2018-1-10 20:26 编辑

strtol函数会将参数nptr字符串根据参数base来转换成长整型数,参数base范围从2至36(进制)。

char data[]="EA60";

long iOut;

iOut = strtol(data, NULL, 16);

Serial.println(iOut);

duanyz 发表于 2018-1-10 20:27:33

最帅的老饼 发表于 2018-1-10 20:15
你的方法没错,但先要把它转成十进制 ,用数组装好 ,然后 vol*1 + vol*10 + vol*100 + vol*10 ...

再请教怎么能转成10进制呢?程序怎么写?

duanyz 发表于 2018-1-10 20:46:25

本帖最后由 duanyz 于 2018-1-10 20:50 编辑

Stormer 发表于 2018-1-10 20:20
strtol函数会将参数nptr字符串根据参数base来转换成长整型数,参数base范围从2至36(进制)。

char data ...

兄弟,你这个函数非常好,不过我这里还是存在着问题不会处理。。

我是用 “ comdata += char(my1Serial.read());” 这个命令读取串口数据,然后打印才知道的它的comdata和 comdata值是分别是EA和 60 。


所以,我就是没有EA60这个数。如果能将comdata和 comdata处理后变成EA60,再用你这个函数就完美了。

我现在如果用comdata代替你的函数中的   iOut = strtol(data, NULL, 16);

也就是这样 :iOut = strtol(comdata, NULL, 16);

可是这函数就不能运行,ide提示sting数不能用在这里。

怎么能将comdata赋值给其他数呢?

求指点。

duanyz 发表于 2018-1-10 21:14:26

Stormer 发表于 2018-1-10 20:20
strtol函数会将参数nptr字符串根据参数base来转换成长整型数,参数base范围从2至36(进制)。

char data ...

最帅的老饼 发表于 2018-1-10 21:17:06

本帖最后由 最帅的老饼 于 2018-1-10 21:21 编辑

char 的 E是 101, 你要把101 - 97 才等于 十进制的 14我知道有这会事,但新手小白没有编过这类型程,自己百度一下 char 转十进制,编个程试验一下吧 。
arduino 是基于 C语言的,C 对数据类型要求很高。 要想深入,必须了解。
页: [1]
查看完整版本: 紧急求助arduino16进制数转为10进制数的方法