将一串字符分割、连接后加入数组-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 668|回复: 4

[未解决] 将一串字符分割、连接后加入数组

[复制链接]
发表于 2022-2-12 14:43 | 显示全部楼层 |阅读模式
我最近在制作VoiceBox Pro的项目时,需要从107000.com/T-Hex这里获取一段字符,如下:
离离原上草一岁一枯荣
无标题.png
但所需要的代码格式是(附上我的代码):
  1. /*
  2.   请先进入https://www.107000.com/T-Hex
  3.   中文不需要库
  4.   下载时先拔掉TX和RX
  5.   TX连接RX,RX连接TX
  6.   输入时不要换行否则会多出一个音
  7. */
  8. char Chinese_GB2312[200] = {0xC0, 0xEB, 0xC0, 0xEB, 0xD4, 0xAD, 0xC9, 0xCF,
  9.                             0xB2, 0xDD, 0xD2, 0xBB, 0xCB, 0xEA, 0xD2, 0xBB,
  10.                             0xBF, 0xDD, 0xC8, 0xD9, 0xD2, 0xB0, 0xBB, 0xF0,
  11.                             0xC9, 0xD5, 0xB2, 0xBB, 0xBE, 0xA1, 0xB4, 0xBA,
  12.                             0xB7, 0xE7, 0xB4, 0xB5, 0xD3, 0xD6, 0xC9, 0xFA
  13.                            };//长度不可超过200
  14. void SYN_FrameInfo(uint8_t Music , uint8_t *HZdata);//必须要有,否则报错
  15. void setup() {
  16.   Serial.begin(9600);
  17.   SYN_FrameInfo(0, Chinese_GB2312);
  18. }
  19. void loop() {

  20. }
  21. void SYN_FrameInfo(uint8_t Music, uint8_t *HZdata) {
  22.   unsigned char Frame_Info[200];//与Chinese_GB2312长度一致
  23.   unsigned char HZ_Length;
  24.   unsigned char ecc = 0;//定义校验字节
  25.   unsigned int i = 0;
  26.   HZ_Length = strlen(HZdata);//需要发送文本的长度
  27.   Frame_Info[0] = 0xFD;//构造帧头0xFD
  28.   Frame_Info[1] = 0x00;//构造数据区长度的高字节
  29.   Frame_Info[2] = HZ_Length + 3;//构造数据区长度的低字节
  30.   Frame_Info[3] = 0x01;//构造命令字:合成播放命令
  31.   Frame_Info[4] = 0x00 | Music << 4;//构造命令字:背景音乐设定
  32.   for (i = 0; i < 5; i++) {
  33.     ecc = ecc ^ (Frame_Info[i]);//对发送的字节进行异或校验,出错将无法播放
  34.   }
  35.   for (i = 0; i < HZ_Length; i++) { //依次发送待合成的文本数据
  36.     ecc = ecc ^ (HZdata[i]); //对发送的字节进行异或校验
  37.   }
  38.   memcpy(&Frame_Info[5], HZdata, HZ_Length);
  39.   Frame_Info[5 + HZ_Length] = ecc;
  40.   for (i = 0; i < 5 + HZ_Length; i++) {
  41.     Serial.write(Frame_Info[i]);//播放内容
  42.   }
  43. }
复制代码
Chinese_GB2312是一个需要“0xXX,”格式字符的数组,我想制作一个小工具,但是始终无法成功:变量f始终为空。
见代码:
  1. String GB2312 = String("C0EBC0EBD4ADC9CFB2DDD2BBCBEAD2BBBFDDC8D9");
  2. String f = "";
  3. char ans[200] = {};
  4. int i = 0;
  5. void setup() {
  6.   Serial.begin(9600);
  7. }

  8. void loop() {
  9.   for (i = 0; i > GB2312.length(); i += 2) {
  10.     f = f + "0x";
  11.     f = f + String(GB2312[i]);
  12.     f = f + GB2312[i + 1];
  13.     f = f + ",";
  14.   }
  15.   Serial.println(String(f));
  16. }
复制代码
请问是由于什么引起的?如何解决?谢谢!
发表于 2022-2-12 16:35 | 显示全部楼层
可以看一下这个 字符串的处理 https://blog.csdn.net/weixin_42063567/article/details/104782189
 楼主| 发表于 2022-2-12 16:52 | 显示全部楼层
ahua7336 发表于 2022-2-12 16:35
可以看一下这个 字符串的处理 https://blog.csdn.net/weixin_42063567/article/details/104782189 ...

好的,谢谢!很有帮助。
发表于 2022-2-14 13:54 | 显示全部楼层
char Chinese_GB2312[200]说明这是字符串,不是数组
 楼主| 发表于 2022-2-15 14:08 | 显示全部楼层
un_named_man 发表于 2022-2-14 13:54
char Chinese_GB2312[200]说明这是字符串,不是数组

这个不一样,在第一段代码里的是我的VoiceBoxPro的代码
我从107000.com/T-HEX得到的是没有分隔符和0x的字符串,很麻烦,所以就想设计一个工具代替完成,服务百姓
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 16:03 , Processed in 0.102663 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表