找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2023|回复: 8
收起左侧

请教:通过串口(TX,RX)发送歌曲名给MCU,歌曲名格式是utf8,如何解析呢?

[复制链接]
ID:731155 发表于 2020-6-20 16:15 | 显示全部楼层 |阅读模式
2黑币
本帖最后由 hei51com 于 2020-6-24 10:17 编辑

需要通过串口(TX,RX)发送歌曲名(utf8 格式)给MCU。

MCU要求以下面的格式发:
比如歌曲名是CD1,那发送0x43 0x44 0x31。
这应该是要以ASCII 十六进制发给MCU吧?

那是不是要把歌曲名utf8 格式转换为ASCII 十六进制,然后通过串口把ASCII 十六进制发给MCU?

歌曲名(utf8格式)、中、英文怎么区别处理?

感谢回答,可能是我描述的不太清楚,再补充以下
//底层只给了以下结构体,char *name 是歌曲名
typedef struct GetFileNameEvtTag {
        QEvt super;
        char *name; //USB 歌曲名(utf8 格式)
        int num;
} GetFileNameEvt;


//调用
GetFileNameEvt *pe = (GetFileNameEvt *)e;
UINT16 name_len =  strlen(pe->name);
printf(" song name %s,len %d\n",pe->name,name_len);  //U盘里面的歌曲名是“CD1.mp3”,这里打印pe->name 也是"CD1.mp3",说明这样调用是对的。

我把歌曲名改为CD1我.mp3,打印pe->name出来是"CD1鎴mp3",有中文时打印出来就不正确。

问题:
1.歌曲名有中、英文,怎么打印才能正常?
2.歌曲名有中、英文,怎么以ASCII 十六进制发给MCU?或者以怎么格式发给MCU(MCU收到后又怎么解析)。




最佳答案

查看完整内容

可以以文本形式发送字符串,如"CD1",接收端把数据串按字节保存在缓存数组,如果传输的信息有规律且范围不太大,可以把相关信息创建一个二维数组,用查表法解析播放指令。
回复

使用道具 举报

ID:213173 发表于 2020-6-20 16:15 | 显示全部楼层
可以以文本形式发送字符串,如"CD1",接收端把数据串按字节保存在缓存数组,如果传输的信息有规律且范围不太大,可以把相关信息创建一个二维数组,用查表法解析播放指令。
回复

使用道具 举报

ID:648281 发表于 2020-6-20 21:48 | 显示全部楼层
没看明白你是要做什么
回复

使用道具 举报

ID:419968 发表于 2020-6-22 00:08 | 显示全部楼层
英文字母发送 就是ASCII吗
回复

使用道具 举报

ID:786561 发表于 2020-6-22 13:12 | 显示全部楼层
Ascll只是可以吧字母什么的翻译成2进制,你2进制发过去,mcu里面再把数据按ascll码规则变成字符,不就是完成数据交互了
回复

使用道具 举报

ID:731155 发表于 2020-6-24 10:17 | 显示全部楼层
51hei**1140 发表于 2020-6-20 21:48
没看明白你是要做什么

感谢回答,可能是我描述的不太清楚,再补充以下

//底层只给了以下结构体,char *name 是歌曲名
typedef struct GetFileNameEvtTag {
        QEvt super;
        char *name; //USB 歌曲名(utf8 格式)
        int num;
} GetFileNameEvt;

//调用
GetFileNameEvt *pe = (GetFileNameEvt *)e;
UINT16 name_len =  strlen(pe->name);
printf(" song name %s,len %d\n",pe->name,name_len);  //U盘里面的歌曲名是“CD1.mp3”,这里打印pe->name 也是"CD1.mp3",说明这样调用是对的。

我把歌曲名改为CD1我.mp3,打印pe->name出来是"CD1鎴mp3",有中文时打印出来就不正确。

问题:
1.歌曲名有中、英文,怎么打印才能正常?
2.歌曲名有中、英文,怎么以ASCII 十六进制发给MCU?或者以怎么格式发给MCU(MCU收到后又怎么解析)。
回复

使用道具 举报

ID:731155 发表于 2020-6-24 10:20 | 显示全部楼层
adject 发表于 2020-6-22 00:08
英文字母发送 就是ASCII吗

感谢回答!
是的,但歌曲名有中、英文的时候,怎么发送给MCU呢?或者怎么判断有没有中文(是中文就不发送给MCU)
回复

使用道具 举报

ID:731155 发表于 2020-6-24 10:21 | 显示全部楼层
scll1 发表于 2020-6-22 13:12
Ascll只是可以吧字母什么的翻译成2进制,你2进制发过去,mcu里面再把数据按ascll码规则变成字符,不就是完 ...

感谢回答,可能是我描述的不太清楚,再补充以下
//底层只给了以下结构体,char *name 是歌曲名
typedef struct GetFileNameEvtTag {
        QEvt super;
        char *name; //USB 歌曲名(utf8 格式)
        int num;
} GetFileNameEvt;

//调用
GetFileNameEvt *pe = (GetFileNameEvt *)e;
UINT16 name_len =  strlen(pe->name);
printf(" song name %s,len %d\n",pe->name,name_len);  //U盘里面的歌曲名是“CD1.mp3”,这里打印pe->name 也是"CD1.mp3",说明这样调用是对的。

我把歌曲名改为CD1我.mp3,打印pe->name出来是"CD1鎴mp3",有中文时打印出来就不正确。

问题:
1.歌曲名有中、英文,怎么打印才能正常?
2.歌曲名有中、英文,怎么以ASCII 十六进制发给MCU?或者以怎么格式发给MCU(MCU收到后又怎么解析)。
回复

使用道具 举报

ID:731155 发表于 2020-6-24 10:21 | 显示全部楼层
wulin 发表于 2020-6-22 17:19
可以以文本形式发送字符串,如"CD1",接收端把数据串按字节保存在缓存数组,如果传输的信息有规律且范围不太 ...

感谢回答,可能是我描述的不太清楚,再补充以下
//底层只给了以下结构体,char *name 是歌曲名
typedef struct GetFileNameEvtTag {
        QEvt super;
        char *name; //USB 歌曲名(utf8 格式)
        int num;
} GetFileNameEvt;

//调用
GetFileNameEvt *pe = (GetFileNameEvt *)e;
UINT16 name_len =  strlen(pe->name);
printf(" song name %s,len %d\n",pe->name,name_len);  //U盘里面的歌曲名是“CD1.mp3”,这里打印pe->name 也是"CD1.mp3",说明这样调用是对的。

我把歌曲名改为CD1我.mp3,打印pe->name出来是"CD1鎴mp3",有中文时打印出来就不正确。

问题:
1.歌曲名有中、英文,怎么打印才能正常?
2.歌曲名有中、英文,怎么以ASCII 十六进制发给MCU?或者以怎么格式发给MCU(MCU收到后又怎么解析)。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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