zoukankan      html  css  js  c++  java
  • libiconv之iconv函数的使用方法

    iconv函数原型为:

    size_t iconv (iconv_t cd,  char* * inbuf, size_t *inbytesleft, char* * outbuf, size_t *outbytesleft); 


    第一个参数是iconv的描述字,其实是指针,第二个参数表示下一次转换位置的指针的指针,第三个参数表示最多处理inbytesleft个字节,第四个参数表示下一次转换后输出的指针的指针,第五个参数表示最多输出outbutesleft个字节。iconv函数一次转换一个多字节字符,每次字符转换,*inbuf增加已转换的字节数,*inbytesleft相应地减少已转换的字节数;对应地,*outbuf*outbytesleft作相应的修改,同时修改cd的转换状态。iconv函数返回本次调用中转换的字符数,可逆的转换不计入。


    注意iconv会改变这五个参数的值,所以我们在使用的时候一定要注意。


    使用的时候或者传副本,或者先把值记录下来,用后在恢复,个人比较倾向于第一种方法。

    如下例子:

    char* utf8_input="伟大的hongchangfirst";

    char* utf8_input_tmp=utf8_input;

    size_t insize=strlen(utf8_input);

    const size_t outsize=1024*1024;

    char* gbk_input=new char[outsize];

    char8 gbk_input_tmp=gbk_input;

    size_t outsize_tmp=outsize;

    size_t rc=iconv(converter, &utf8_input_tmp, &insize, &gbk_input_tmp, &outsize_tmp);


    以下是iconv函数的英文注释:

    /* Converts, using conversion descriptor ‘cd’, at most ‘*inbytesleft’ bytes
       starting at ‘*inbuf’, writing at most ‘*outbytesleft’ bytes starting at
       ‘*outbuf’.
       Decrements ‘*inbytesleft’ and increments ‘*inbuf’ by the same amount.
       Decrements ‘*outbytesleft’ and increments ‘*outbuf’ by the same amount. */


    原文:http://blog.csdn.net/hongchangfirst/article/details/8951391

    作者:hongchangfirst

    hongchangfirst的主页:http://blog.csdn.net/hongchangfirst



  • 相关阅读:
    bzoj1081 [SCOI2005]超级格雷码
    bzoj3790 神奇项链
    bzoj2822 [AHOI2012]树屋阶梯
    bzoj1485 [HNOI2009]有趣的数列
    bzoj1486 [HNOI2009]最小圈
    bzoj2721 [Violet 5]樱花
    POJ 1238 Substrings
    ZOJ Team Formation
    POJ 1459 Power Network
    POJ 1458 Common Subsequence
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3089590.html
Copyright © 2011-2022 走看看