关于单片机汉字转十六进制问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于单片机汉字转十六进制问题相关的知识,希望对你有一定的参考价值。

试用的atmel 128单片机。
unsigned char[] = {"你好"};

如何转变为 0xC4 0xE3 0xBA 0xC3
现在两个问题:
1、如何指定字符串的中文编码为GBK编码;
2、如何把GBK编码转换为十六进制,如上。
3、操作系统如linux或者windows我知道可以采用iconv库来指定编码格式并进行转变,但单片机没有此类函数;单片机不知道能否实现以上转变。
补充一下:
平台为:8位的Atmel Atmega328P-AU单片机;此单片机是不带操作系统的;
转换后是发送到一个语音合成模块,而不是显示器(有些显示器带字库)的;
unsigned char buf[] = "你好";
int nLen = strlen(buf); // nLen=7
也就是每个汉字为三个字节,最后为\0,所以长度为7
如其他网友所说,是不是要自己做个字库,或者找一个字库模块。

参考技术A 这个语句的中文存储本身就是你打的那4个8位的二进制数并不需要你手动转为GBK编码,而且你语句写错了,如果你需要把中文显示出来那么只需要一个带字库的显示器就成,直接把这个数据传过去就能显示中文,转换成16进制就直接用int数据类型就成,不需要别的
unsigned int a[] = {"你好"};
参考技术B 字符串类型其实也是一种数组只不过末尾时“\0”,你只要用一个数字跟其等价就行
方法:建立一个数组实现转换:
void chang_acll(*p)

while(*p != "\0")


p++;

hax_code[i] = *p

i++;




如果不带字库,你肯定要自己做个字库的,网上有现成的方案可以参考
参考技术C 其它的变量,例如

uchar a ,b,c,d;
uchar hz[]="你好";
a=hz[0];
b=hz[1];
c=hz[2];
d=hz[3];

就可以了。

c语言怎么字符串和16进制转码 汉字转16进制如“我”转换成 “0xe68891”; 16进制转汉字“0xe68891”转 我

参考技术A “我”字被转成了3个字节,那想必是用的utf-8了
用api的WideCharTpMultiByte即可

以上是关于关于单片机汉字转十六进制问题的主要内容,如果未能解决你的问题,请参考以下文章

16进制转汉字的原理是啥

汉字怎么转Unicode编码 十六进制的

c语言怎么字符串和16进制转码 汉字转16进制如“我”转换成 “0xe68891”; 16进制转汉字“0xe68891”转 我

串口助手怎么既显示16进制数有显示汉字??

arduino串口监视器怎么输入

lua 汉字怎样转为unicode十六进制编码?? 整的我焦头烂额