标题: 关于C语言将数组转换成字符串的方法 [打印本页]

作者: 13872888583    时间: 2023-4-20 22:44
标题: 关于C语言将数组转换成字符串的方法
你们好,各位,前段时间研究蓝牙模块,现在终于有点眉目了。由于C语言没有学好,目前有个问题还是问一下大家,将蓝牙模块接收到的数组转换成字符串在oled屏幕上显示。网上虽然有这样的资料,写的不清不楚或者不是C语言用的,不知道各位如何解决这个问题的。有介绍这方面的资料也可以的。
作者: Hephaestus    时间: 2023-4-20 23:22
你先要举个栗子吧,数组具体数字是什么,你打算转换成什么字符串?
作者: Y_G_G    时间: 2023-4-21 00:41
一般入门的都会用STC单片机
如果是用STC的话,就用程序空间大点的,成本并不重要,能学到东西就行
用sprintf函数可以转换成ASCII,虽然会占用1K左右的程序空间,但这函数真是好用,特别是对于浮点型数据,有时候前面有负号,有时候是1.01,有时候是1.1234这种类型的数据,处理起来很方便
对于这类功能,最好不要去直接复制别人的代码
先去认真的看一下OLED的数据手册,要知道怎么控制OLED,然后自己写一个简单的显示函数,哪怕是只能显示一个字母"A",那都算是进步了
然后再去查查我说的这个函数是怎么用的,再一次一次的调试代码,这个过程就是你学习C语言的过程
我当初也是千百次烧录验证走过来的,从中也算是学到不少的知识
作者: wufa1986    时间: 2023-4-21 08:00
sprintf函数非常强大
作者: Hephaestus    时间: 2023-4-21 09:22
wufa1986 发表于 2023-4-21 08:00
sprintf函数非常强大

sprintf异常耗费资源,千万别用。
作者: 13872888583    时间: 2023-4-21 09:24
Hephaestus 发表于 2023-4-20 23:22
你先要举个栗子吧,数组具体数字是什么,你打算转换成什么字符串?

你好,老师,我直接说问题吧,我用手机蓝牙助手发送11110d0a,反正这之类的十六进制的,串口打印是空白,不过显示的位数是2位,这个是对的,我想看看在OLED上显示看看显示什么,  我之前是转换成整型数字,显示的数字有点问题,所以让它显示字符串,不过后期想做一个蓝牙小车,
作者: 13872888583    时间: 2023-4-21 09:32
Y_G_G 发表于 2023-4-21 00:41
一般入门的都会用STC单片机
如果是用STC的话,就用程序空间大点的,成本并不重要,能学到东西就行
用sprintf ...

谢谢,这个函数以前在浮点数显示的时候用过,感觉挺方便的,那我看一下这个函数
作者: xueyuking    时间: 2023-4-21 09:37
0x11110d0a,直接用printf()转换格式成ASCII
作者: zhuls    时间: 2023-4-21 09:47
本帖最后由 zhuls 于 2023-4-21 09:49 编辑
13872888583 发表于 2023-4-21 09:24
你好,老师,我直接说问题吧,我用手机蓝牙助手发送11110d0a,反正这之类的十六进制的,串口打印是空白, ...

没理解错的话,你收到的是0x01,0x23,0x45,0x66,0x78,0x09这样的数据,你要显示的是012345667809..。
如果是这样,坛里有例子。。你搜一下
作者: lkc8210    时间: 2023-4-21 11:17
蓝牙助手通常有Hex模式和文字模式
Hex模式发11110d0a, 单片机收到0x11,0x11,0x0d,0x0a
文字模式发11110d0a,单片机收到经ASCII转换的数值0x31,0x31,0x31,0x30,0x64,0x30,0x61
以下是ASCII表

可以看到0x11,0x11,0x0d,0x0a在ASCII表中是没有可视字符的
所以串口打印是空白的


作者: Hephaestus    时间: 2023-4-21 12:45
  1. ch[0]="0123456789abcdef"[s>>4];
  2. ch[1]="0123456789abcdef"[s&0xf];
复制代码

作者: gf3gf3    时间: 2023-4-21 16:19
用for循环数组,然后结合strcat函数进行拼接
作者: gf3gf3    时间: 2023-4-21 16:21
  1. int i;
  2.         int arry[7] = {5,2,0,1,3,1,4};
  3.         char str[5] = "\0";
  4.         char str1[10] = "\0";
  5.        
  6.         for(i=0;i<7;i++)
  7.         {
  8.                 sprintf(str,"%d",arry[i]);
  9.                 strcat(str1,str);
  10.         }
  11.         printf("%s\r\n",str1);
复制代码

作者: 13872888583    时间: 2023-4-21 19:49
gf3gf3 发表于 2023-4-21 16:21

感谢,兄弟堪称及时雨宋公明。
作者: 13872888583    时间: 2023-4-21 19:51
lkc8210 发表于 2023-4-21 11:17
蓝牙助手通常有Hex模式和文字模式
Hex模式发11110d0a, 单片机收到0x11,0x11,0x0d,0x0a
文字模式发11110d0 ...

感谢,一看表格,知道了问题所在呢?
作者: wydev    时间: 2023-4-22 15:02
可以发送一些ABC之类的可以显示的字符,再把接收到的数据查表或者计算对比




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1