标题: 请教:通过串口(TX,RX)发送歌曲名给MCU,歌曲名格式是utf8,如何解析呢? [打印本页]

作者: hei51com    时间: 2020-6-20 16:15
标题: 请教:通过串口(TX,RX)发送歌曲名给MCU,歌曲名格式是utf8,如何解析呢?
本帖最后由 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收到后又怎么解析)。





作者: wulin    时间: 2020-6-20 16:15
可以以文本形式发送字符串,如"CD1",接收端把数据串按字节保存在缓存数组,如果传输的信息有规律且范围不太大,可以把相关信息创建一个二维数组,用查表法解析播放指令。
作者: 51hei**1140    时间: 2020-6-20 21:48
没看明白你是要做什么
作者: adject    时间: 2020-6-22 00:08
英文字母发送 就是ASCII吗
作者: scll1    时间: 2020-6-22 13:12
Ascll只是可以吧字母什么的翻译成2进制,你2进制发过去,mcu里面再把数据按ascll码规则变成字符,不就是完成数据交互了
作者: hei51com    时间: 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收到后又怎么解析)。

作者: hei51com    时间: 2020-6-24 10:20
adject 发表于 2020-6-22 00:08
英文字母发送 就是ASCII吗

感谢回答!
是的,但歌曲名有中、英文的时候,怎么发送给MCU呢?或者怎么判断有没有中文(是中文就不发送给MCU)
作者: hei51com    时间: 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收到后又怎么解析)。

作者: hei51com    时间: 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收到后又怎么解析)。





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