c语言下汉字转换(字符串改为utf-8编码)

字符串处理 专栏收录该内容
1 篇文章 0 订阅

    相信大家应该都知道,汉字经过utf-8后转码会变成一串字串,其中以/分割,如:\xE7\x98\x91............,其中每三个/(十六进制)代表一个汉字,也就是一个汉字转换为了三个字节。

    一般情况下,我们只需要复制这段字串,初始化到一个指针,在做输出就可以显示相应的汉字,这是因为在这段初始化过程中,已经自动将/识别(认为是十六进制),并将每个十六进制放入一个字节中,这样就可以正常的显示汉字,但是有时候我们通过一些别的方式来截取的字段,直接输出是无法获得这种效果的,因此就需要我们做一些转换来将其显示出来。

    首先我们要明白,我们现在需要做的就是将每个/后面相应的字串改为十六进制,然后在将其以一个字节的方式存入数组中,理解了这种方式自然就很容易写出来了。

请看下面函数:

#include <string.h>
#include <stdlib.h>
#include <stdio.h>


static char *stohex(const char *buf, char *dst)
{
	char buf_temp[20148] = {0};
	int x = 0;
	unsigned long i;
	while(*buf != '\0')
	{
		if(*buf == '\\')
		{
			strcpy(buf_temp,buf);
			*buf_temp = '0';
			*(buf_temp + 4) = '\0';
			i = strtoul(buf_temp, NULL, 16);
			dst[x] = i;
			buf += 3;
		}
		else
		{
			dst[x] = *buf;
		}
		x++;
		buf++;


	}	
	dst[x] = '\0';
	return dst;
}


int main()
{
	char szTest[255] = {0x00};
	memcpy(szTest, "\xE7\x98\x91", strlen("\xE7\x98\x91"));
	char szDst[255] = {0x00};
	stohex(szTest, szDst);
	printf("szDst = %s\n", szDst);
	return 0;
}

这个函数的主要功能就是实现了这个转换,理解原理实现起来就很简单,拷贝代码到linux下,并通过gcc编译,得到结果如下:

 

展开阅读全文
  • 6
    点赞
  • 4
    评论
  • 19
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

打赏
文章很值,打赏犒劳作者一下
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页

打赏

Brice丶凌爱

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值