MATLAB下发送和接收汉字

前两天写了一个小程序,涉及到汉字的发送和读取,去matlab官网上找帮助文档,也没有说很清楚,有些博客也讲的比较模糊,最后还是自己摸索了一下,发现其实还挺简单,和大家介绍一下

1. 引入Unicode码

首先说明一下,对于 fwrite()fread() 函数,他们默认的读取和发送字符编码均为 ASCII 码,而 ASCII 表里并不包含汉字编码,所以在发送和接收的时候不能正确解析,最后得到的就是乱码。对于英文之外的文字,我们有一种统一的编码,叫做 Unicode 码,它几乎包含了所有国家的字符,其中就包括了大多数的汉字,这里我们就要利用这种编码来完成汉字的传输。(注意: ASCII 码采用 8位二进制数 表示,Unicode 码采用 16位二进制数 表示,因此 Unicode 码有广泛性,但是占用空间较大)

2. 转换函数介绍

为了完成编码转换,在这里介绍两个函数,一个是 unicode2native() ,很清楚,这个是将Unicode码转换为ASCII码表示的函数,另一个就是 native2unicode() ,这个就是相反操作,将ASCII码转换为Unicode码表示。利用这两个函数,我们就能完成编码转换,再利用收发函数,就可以完成任意形式字符的收发。

3.实现方法

如何实现呢,其实很简单,首先用 unicode2native() 把要发送的字符转换为ASCII码表示形式,然后用 fwrite() 发送出去,使用 fread() 函数读取,之后再使用 native2unicode() 函数,还原汉字编码,就可以显示汉字了。

4. 例子

只是文字说明的话,还是不够直观,我这里有一个udp通信的例子,大家可以拿去直接试一下,贴在下面

u1=udp('222.20.36.105','RemotePort',8825,'LocalPort',8827);%与IP为222.20.36.185的远程主机(其实是我自己的IP)建立udp,远程主机端口为8866,本地主机端口为8844。
u2=udp('222.20.36.105','RemotePort',8827,'LocalPort',8825);%同上
fopen(u1);%打开udp连接(实际上并没有连接,udp是无连接的通信协议)
fopen(u2);%同上
send_data=unicode2native('发送汉字');%把要发送的汉字转换为ASCII码表示形式
fwrite(u1,send_data);%主机1(就是udp1)发送消息
rec_data=fread(u2);%主机2接收消息
rec_data=native2unicode(rec_data)%把接收到的ASCII码转换为Unicode编码形式
rec_data=rec_data'%把列字符组转置,好看一些
fclose(u1);%关闭udp1连接
fclose(u2);%同上
delete(u1);%删除udp1连接,释放内存
delete(u2);%同上
clear u1;%清除工作区中的udp1数据
clear u2;%同上
  1. 运行结果如下图所示:在这里插入图片描述

5. 这样就简单的完成了汉字的收发,有问题的话多多交流(注意:不拘泥于汉字,几乎所有字符数据都可以发送,当然也包括英文字母)

注意:本方法不适用于公网远程通信,具体原因看我这篇文章:

MATLAB实现简单的聊天软件

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值