依赖库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. Javascript 运动中Offset的bug——逐行分析代码,让你轻松了解运动的原理

    我们先来看看这个bug 是怎么产生的. <style type="text/css"> #div1 { width: 200px; height: 200px; bac ...

  2. js关闭当前页面/关闭当前窗口/移动端 代码

    var userAgent = navigator.userAgent; if (userAgent.indexOf("Firefox") != -1 || userAgent.i ...

  3. JavaScript基本概念(操作符)

    一元操作符 一元操作符在处理所有的非数值时,相当于将该值经过Number()转换成数值,如 +"12" 将把 "12" 字符串转换为数字. 位操作符 负数在计算 ...

  4. Realview MDK 中不用手动开中断的原因

    startup.s启动代码文件: ; Enter Supervisor Mode and set its Stack Pointer MSR CPSR_c, #Mode_SVC:OR:I_Bit:OR ...

  5. Mindjet 一打开鼠标就动不了解决方法

    在网上查找了一下相关资料,这个主要是Mindjet不支持64位系统造成的,其实就和Windows tablet pc input 这个服务相冲突造成的,临时的解决方法是,win+r (别告诉我你不知道 ...

  6. List<int>是值类型还是引用类型

    class Program { static void Main(string[] args) { List<int> lst = new List<int>(); lst.A ...

  7. RBF network

    1.radial basis function RBF表示某种距离,$\mu_m$为中心点,相当于将点$x$到中心点的某种距离作为特征转换 Output方法可以根据需求任意选取(比如使用SVM,log ...

  8. 顺便说一下$.each()函数:

    $.each()函数不同于JQuery对象的each()方法,它是一个全局函数,不操作JQuery对象,而是以一个数组或者对象作为第1个参数,以一个回调函数作为第2个参数.回调函数拥有两个参数:第1个 ...

  9. UIScrollview不全屏,解决方案

    self.edgesForExtendedLayout = UIRectEdgeNone;

  10. (转)IOS笔记 #pragma mark的用法

    简单的来说就是为了方便查找和导航代码用的.   下面举例如何快速的定位到我已经标识过的代码.     #pragma mark 播放节拍器 - (void) Run:(NSNumber *)tick{ ...