iconv编码转换

iconv编码转换

函数原型

int CMstdsQuery::IconvQuerySQL(const char *to, const char *from,
                        const char *in, size_t inlen, char **out, size_t *outlen)

参数说明

输入参数

to:目的编码

from:原始编码

in:要转换的字符串指针

inlen:要转换的字符串长度

输出参数

out:转换后的字符串指针

outlen:转换后的字符串长度

函数实现

int CMstdsQuery::IconvQuerySQL(const char *to, const char *from,
                        const char *in, size_t inlen, char **out, size_t *outlen)
{
    if(NULL == in || inlen < 0){
        return -1;
    }
    iconv_t icd;
    size_t ret;
    icd = iconv_open(to, from);
    if(icd == ((iconv_t) -1)){
        return -1;
    }
    char *inbuf = new char[inlen];
    if(inbuf == NULL){
        iconv_close(icd);
        return -1;
    }
    char *inbufleft = inbuf;
    size_t inbufleftlen = inlen;
    memcpy(inbuf, in, inlen);
    size_t outbuflen = inlen * 2;
    char *outbuf = new char[outbuflen];
    if(outbuf == NULL){
        delete[] inbuf;
        iconv_close(icd);
        return -1;
    }
    char *outbufleft = outbuf;
    size_t outbufleftlen = outbuflen;
    iconv(icd,NULL,0,NULL,0);
    ret = iconv(icd, &inbufleft, (size_t *)&inbufleftlen, &outbufleft, (size_t *)&outbufleftlen);
    if(ret == (size_t) -1){
        delete[] inbuf;
        delete[] outbuf;
        iconv_close(icd);
        return ret;
    }
    delete[] inbuf;
    iconv_close(icd);
    *out = outbuf;
    *outlen = outbuflen - outbufleftlen;
    return 0;
}

读后感

欢迎沟通交流。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值