依赖库libiconv,libiconv库的交叉编译不做描述,网上很多

 #include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include "iconv.h"
#include "eventlist.h" static int ChangeCode( const char* pFromCode, const char* pToCode, const char* pInBuf,
size_t* piInLen, char* pOutBuf, size_t* piOutLen )
{
int iRet;
char **pin = &pInBuf;
char **pout = &pOutBuf;
iconv_t hIconv; //printf("%s: outlen=%d, inlen=%d\n", __FUNCTION__, *piOutLen, *piInLen); //打开字符集转换
hIconv = iconv_open( pToCode, pFromCode );
if ( - == (int)hIconv )
{
perror("iconv_open");
return -;
}
//开始转换
printf("%s: 1 outlen=%d\n", __FUNCTION__, *piOutLen);
iRet = iconv( hIconv, pin, piInLen, pout, piOutLen );
if ( - == iRet )
{
perror("iconv");
return -;
}
printf("%s: 2 outlen=%d\n", __FUNCTION__, *piOutLen); //关闭字符集转换
iconv_close( hIconv ); **pout = '\0';
return iRet;
} static int MAIN_UTFToGb2312(char * pcFrom, char * pcTo, int iMaxToLen)
{
char * psInBuf = NULL;
char * psOutBuf = NULL;
unsigned int iInLen = ;
unsigned int iOutLen = ;
int iRet; iInLen = strlen(pcFrom)+;
psInBuf = (char *)malloc(iInLen);
if ( NULL == psInBuf )
{
return ;
}
memset(psInBuf, 0x0, iInLen);
memcpy(psInBuf, pcFrom, iInLen); iOutLen = iMaxToLen;
psOutBuf = (char *)malloc(iOutLen);
if ( NULL == psOutBuf )
{
free(psInBuf);
psInBuf = NULL;
return ;
}
memset(psOutBuf, 0x0, iOutLen); iRet = ChangeCode( "utf-8", "gb2312", psInBuf, &iInLen, psOutBuf, &iOutLen );
//iRet = u2g(psInBuf, iInLen, psOutBuf, iOutLen);
if ( != iRet )
{
printf("ChangeCode: Error\n");
//return 0;
}
memcpy(pcTo, psOutBuf, iOutLen);
printf("%s: iOutLen = %d\n", __FUNCTION__, iOutLen); free(psInBuf);
psInBuf = NULL;
free(psOutBuf);
psOutBuf = NULL; return iOutLen; } static int MAIN_GB2312ToUTF(char * pcFrom, char * pcTo, int iMaxToLen)
{
char * psInBuf = NULL;
char * psOutBuf = NULL;
unsigned int iInLen = ;
unsigned int iOutLen = ;
int iRet; iInLen = strlen(pcFrom)+;
psInBuf = (char *)malloc(iInLen);
if ( NULL == psInBuf )
{
return ;
}
memset(psInBuf, 0x0, iInLen);
memcpy(psInBuf, pcFrom, iInLen); iOutLen = iMaxToLen;
psOutBuf = (char *)malloc(iOutLen);
if ( NULL == psOutBuf )
{
free(psInBuf);
psInBuf = NULL;
return ;
}
memset(psOutBuf, 0x0, iOutLen); iRet = ChangeCode( "gb2312", "utf-8", psInBuf, &iInLen, psOutBuf, &iOutLen );
//iRet = u2g(psInBuf, iInLen, psOutBuf, iOutLen);
if ( != iRet )
{
printf("ChangeCode: Error\n");
//return 0;
}
memcpy(pcTo, psOutBuf, iOutLen);
printf("%s: iOutLen = %d\n", __FUNCTION__, iOutLen); free(psInBuf);
psInBuf = NULL;
free(psOutBuf);
psOutBuf = NULL; return iOutLen; } int main()
{
char strUTF[]={
0xE5, 0xBC, 0x80, 0xE8,0xBD, 0xA6, 0xE4, 0xBA, 0x8B, 0xE4, 0xBB, 0xB6, 0xE5, 0xBC, 0x80, 0xE8,0xBD, 0xA6, 0xE4, 0xBA, 0x8B, 0xE4, 0xBB, 0xB6,
0xE5, 0xBC, 0x80, 0xE8,0xBD, 0xA6, 0xE4, 0xBA, 0x8B, 0xE4, 0xBB, 0xB6, 0xE5, 0xBC, 0x80, 0xE8,0xBD, 0xA6, 0xE4, 0xBA, 0x8B, 0xE4, 0xBB, 0xB6,
0xE5, 0xBC, 0x80, 0xE8,0xBD, 0xA6, 0xE4, 0xBA, 0x8B, 0xE4, 0xBB, 0xB6, 0xE5, 0xBC, 0x80, 0xE8,0xBD, 0xA6, 0xE4, 0xBA, 0x8B, 0xE4, 0xBB, 0xB6,
0xE5, 0xBC, 0x80, 0xE8,0xBD, 0xA6, 0xE4, 0xBA, 0x8B, 0xE4, 0xBB, 0xB6, 0xE5, 0xBC, 0x80, 0xE8,0xBD, 0xA6, 0xE4, 0xBA, 0x8B, 0xE4, 0xBB, 0xB6,
0xE5, 0xBC, 0x80, 0xE8,0xBD, 0xA6, 0xE4, 0xBA, 0x8B, 0xE4, 0xBB, 0xB6, 0xE5, 0xBC, 0x80, 0xE8,0xBD, 0xA6, 0xE4, 0xBA, 0x8B, 0xE4, 0xBB, 0xB6,
0xE5, 0xBC, 0x80, 0xE8,0xBD, 0xA6, 0xE4, 0xBA, 0x8B, 0xE4, 0xBB, 0xB6, 0xE5, 0xBC, 0x80, 0xE8,0xBD, 0xA6, 0xE4, 0xBA, 0x8B, 0xE4, 0xBB, 0xB6,
0x00, 0x00, 0x00
};
char chTmpStr[];
int len = ; memset(chTmpStr, 0x0, );
MAIN_UTF2Gb2312(strUTF, chTmpStr, );
printf("Main: change=%s\n", chTmpStr); return ;
}

C语言-字符编码转换:UTF与GB2312的更多相关文章

  1. php字符编码转换之gb2312转为utf8(转)

    在php中字符编码转换我们一般会用到iconv与mb_convert_encoding进行操作,但是mb_convert_encoding在转换性能上比iconv要差很多哦.string iconv ...

  2. iconv字符编码转换

    转自 http://blog.csdn.net/langresser_king/article/details/7459367 iconv(http://www.gnu.org/software/li ...

  3. Char Tools,方便的字符编码转换小工具

    工作关系,常有字符编码转换方面的需要,写了这个小工具 Char Tools是一款方便的字符编码转换小工具,基于.Net Framework 2.0 Winform开发 主要功能 URL编码:URLEn ...

  4. php 字符编码转换函数 iconv mb_convert_encoding比较

    在使用PHP处理字符串时,我们经常会碰到字符编码转换的问题,你碰到过iconv转换失败吗? 发现问题时,网上搜了搜,才发现iconv原来有bug ,碰到一些生僻字就会无法转换,当然了配置第二个参数时, ...

  5. C语言字符编码处理

    一.字符编码识别 1.简介 uchardet是一个开源的用于文本编码检测的C语言库,其功能模块是用C++实现的,通过一定数量的字符样本独立的分析出文本的编码,当前已经支持UTF-8/GB13080/B ...

  6. day4学python 字符编码转换+元组概念

    字符编码转换+元组概念 字符编码转换 #coding:gbk //此处必声明 文件编码(看右下角编码格式) #用来得到python默认编码 import sys print(sys.getdefaul ...

  7. erlang中字符编码转换(转)

    转自:http://www.thinksaas.cn/group/topic/244329/ 功能说明: erlang中对各种语言的编码支持不足,此代码是使用erlang驱动了著名的iconv编码库来 ...

  8. 编码问题 php字符编码转换类

    各种平台和软件打开显示的编码问题,需要使用不同的编码,根据我们不同的需求. php 字符编码转换类,支持ANSI.Unicode.Unicode big endian.UTF-8.UTF-8+Bom ...

  9. Python—字符编码转换、函数基本操作

    字符编码转换 函数 #声明文件编码,格式如下: #-*- coding:utf-8 -*- 注意此处只是声明了文件编码格式,python的默认编码还是unicode 字符编码转换: import sy ...

随机推荐

  1. Flink Program Guide (4) -- 时间戳和Watermark生成(DataStream API编程指导 -- For Java)

    时间戳和Watermark生成 本文翻译自Generating Timestamp / Watermarks --------------------------------------------- ...

  2. linux命令学习03-grep

    实例1.查找某个进程 #ps -ef | grep ssh root 1771 1 0 12:07 ? 00:00:00 /usr/sbin/sshdroot 2362 1771 0 16:34 ? ...

  3. 在Linux上怎么安装和配置DenyHosts工具

    使用DenyHosts能够进行自动屏ip的功能,掌握DenyHosts在Linux系统中的安装是很有必要的,那么在Linux系统中要如何安装DenyHosts工具呢?安装后又要如何配置呢?这都是用户需 ...

  4. Hibernate的Criteria用法

    在hibernate的Session里面使用createCriteria可以创建一个Criteria实例帮助我们进行条件查询,不用自己串hql语句,很方便. 用法很简单,首先传Class实例创建Cri ...

  5. aix vg lv pv

    lsvg lsvg -o lsvg rootvg 查看rootvg的信息 lsvg -p rootvg 查看rootvg卷里的物理硬盘以及分布信息 lsvg -l rootvg 查看rootvg卷下的 ...

  6. Android GUI Building Blocks

    说明:此笔记为“Android开发”学习视频的笔记,链接如下:http://open.163.com/movie/2010/1/8/D/M79HE97C3_M79HEQJ8D.html 一, Acti ...

  7. php-GD库的函数(一)

    <?php //getimagesize - 取得图片的大小[即长与宽] //print_r(getimagesize("./logo_i.gif")); //Array ( ...

  8. SDUT OJ 2783 小P寻宝记

    #include<iostream> #include<memory.h> #define N 10020 using namespace std; int dp[N],pi[ ...

  9. 个人封装的一个Camera类

    好久不写博客了,代码写了不少,但大多数都是拿来主义,要不是网上,要不就是自己曾经的代码拼装. 新工作是搞Android开发的,近期任务要求我封装一个Carmera类,自己也认为还是封装以后方便使用,弄 ...

  10. BaseAdapter 注意的关键点!

    BaseAdapter  我们一般就是继承然后重写自定义,然后listview  set进去即可!  数据改变的时候,我们习惯这样: public void update(List list) {   ...