matlab l 汉字字符串,Matlab中汉字编码的操作

对于汉字‘啊’,它的区位码为‘1601’,机内码是“B0A1”。可是在MATLAB中键入汉字,却发现它的值不是机内码。比如:

>a='啊'

a =

> a=a-0

a =

21834

>b=dec2hex(a)

b =

554A

这个值显然不是合理的机内码,那么如何在Matlab中得到汉字的机内码呢?

一、使用函数 mxArrayToString 将MATLAB的字符串转换为普通字符串时会将unicode代码转换为内码

利用mex函数可以取到内码,在使用函数 mxArrayToString

将MATLAB的字符串转换为普通字符串时会将unicode代码转换为内码,然后再将其输出就可以实现了。将代码存为

mexGetCode.cpp 然后用 mex mexGetCode.cpp 编译一下就可以用了。

[code]

#include "mex.h"

#include "string.h"

void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray

*prhs[])

{

if(nrhs != 1 ||

!mxIsChar(prhs[0]))

{

mexErrMsgTxt("Requires

one char array argument!");

}

if(nlhs >

1)

{

mexErrMsgTxt("Too

many output arguments!");

}

char *pStr =

mxArrayToString(prhs[0]);

if(pStr != NULL)

{

int nLen =

strlen(pStr);

plhs[0] =

mxCreateNumericMatrix(1, nLen, mxUINT8_CLASS, mxREAL);

void *pCode =

mxGetData(plhs[0]);

memcpy(pCode,

(void*)pStr, nLen);

mxFree(pStr);

pStr =

NULL;

}

else

{

plhs[0] =

mxCreateNumericMatrix(0, 0, mxUINT8_CLASS, mxREAL);

}

}

二、使用unicode2native和native2unicode函数

通过unicode2native转成本地编码,例如:

y=unicode2native(a,'CP936')

可以看到y是个长度为2的数组了,通过执行native2unicode,又可以吧y转回unicode编码。

一般情况下,从文件中读出来的汉字,最初的编码是native形式,要转成unicode形式,才可以显示出来。

而当你把汉字写入文件时,也要先转换成native形式,才可以写入。

下面是上述两个过程的一个转换实例:

%

% 假设二进制文件mytest里包含一个“日”字,

% 要把它显示出来,并要求写到另一个文件yourtest里。

%

fiIn=fopen('mytest','r'); %打开待读取文件

label=native2unicode(fread(fiIn,2,'uchar'),'CP936'); %读取文件并转成unicode编码

disp(label); %显示汉字

fiOut=fopen('yourtest','wt');

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值