大家好,欢迎来到IT知识分享网。
背景:
项目需要在mips32架构的freertos系统上将输入的汉字、标点符号、数字、字母等转成机内码输出,第一个想到的办法是移植第三方库进行编码转换,网上搜了一圈libiconv、ICU库都可以实现,但是在我的项目上移植编译各种报错、非常痛苦。遂学习了一番,在计算机C语言编码中,汉字以UTF-8格式存储,想要转成机内码也就是GBK码输出还有一种方法就是对照码表进行转换。
源码
#include <stdio.h> #include "gbk.h" void hex_data_to_log_data(unsigned char *src, int len, char *dst) {
int i = 0; int index = 0; char buff[1024] = {
0}; for (i = 0; i < len; i++) {
index += sprintf(buff + index, "%02x", src[i]); index += sprintf(buff + index, " "); } if (strlen(buff) > 0) strcpy(dst, buff); } int get_gbk_len(char *str) {
char *p = str; int len = 0; if (p == NULL) return 0; while (*p != 0x00) {
len++; p = p + 1; } return len; } int main() {
char utf[] = "你好"; char utf_hex[2048] = {
0}; char gbk_hex[2048] = {
0}; unsigned char gbk[2048] = {
0}; strcpy(gbk, utf_to_gbk(utf)); hex_data_to_log_data((unsigned char *)gbk, get_gbk_len(gbk), gbk_hex); hex_data_to_log_data((unsigned char *)utf, get_gbk_len(utf), utf_hex); printf("原文:%s\n", utf); printf("UTF 编码:%s\n", utf_hex); printf("GBK 编码:%s\n", gbk_hex); }
代码解释:
代码非常简单,测试将汉字“你好”转成GBK编码并转成十六进制输出只需要包含一个头文件gbk.h,即可实现UTF-8编码与GBK编码互转。由于gbk.h附带码表整个文件非常大这里仅截图展示,源代码放在下方链接。整个实现.c和.h文件只用到一些C语言标准头文件可跨平台运行。(如果资源暂时未通过审核可评论留言我发给你)
编码转换头文件gbk.h获取
在线编码转换工具网站验证
PS:大部分在线汉字转UTF-8其实都是转成unicode编码,这边推荐一个网站
在线汉字转UTF-8
输出结果展示
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/113971.html

