c++ 转化字节码 iconv

在编程通信过程中不同操作系统使用不同字节码,如utf-8, gbk等需要相互转化
linux提供一个系统调用函数来转换字节码 iconv,使用注意不要错误使用转换码

以下为代码演示

#include <iconv.h> 
#include <iostream> 
#include <stdio.h>
#include <string.h>

using namespace std; 

class IconvConvertString
{
public:
  IconvConvertString() = delete;
  IconvConvertString(const IconvConvertString &) = delete;
  IconvConvertString& operator = (const IconvConvertString &) = delete;
	IconvConvertString(const char *from_charset, const char *to_charset)
	{ 
		cd = iconv_open(to_charset, from_charset); 
	} 

	~IconvConvertString() 
	{ 
		iconv_close(cd); 
	} 

	size_t ConvertCode(char *inbuf, size_t inlen, char *outbuf, size_t outlen)
	{ 
		char **pin = &inbuf; 
		char **pout = &outbuf; 
		memset(outbuf,0,outlen); 
		return iconv(cd, pin, (size_t *)&inlen, pout, (size_t *)&outlen); 
	}

private: 
	iconv_t cd; 

};

int main()
{
    IconvConvertString icc("utf-8", "gbk"); 
    char *str_input = "缁忓吀 鎷煎崄";
    char outString[512] = {0};
    int ret = icc.ConvertCode(str_input, strlen(str_input), outString, 512);
    printf("ret = %d\n", ret);
    printf("sourceString = %s\n", str_input);
    printf("ConvertString = %s\n", outString);
    char *str_2 = "中文 呢";
  
    IconvConvertString icc2("gbk", "utf-8");
    char out2[512] = { 0 };
    int ret2 = icc2.ConvertCode(str_2, strlen(str_2), out2, 512); 
    printf("ret2 = %d\n", ret2);
    printf("str2 = %s\n", str_2);
    printf("constr2 = %s\n", out2);

    char *str_3 = "中文呢";
    IconvConvertString icc3("utf-8", "gbk");
    char out3[512] = { 0 };
    int ret3 = icc3.ConvertCode(str_3, strlen(str_3), out3, 512); 
    printf("ret3 = %d\n", ret3);
    printf("str3 = %s\n", str_3);
    printf("constr3 = %s\n", out3);
}

演示图片
演示结果
如果有问题请添加QQ-986573837

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值