编码转换工具 源码

// Change.cpp: implementation of the CChange class.
//
//

#include "stdafx.h"
#include "CodeChange.h"
#include "Change.h"


#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//
// Construction/Destruction
//

CChange::CChange()
{

}

CChange::~CChange()
{

}

CString CChange::Encode_ansitounicode(CString str_temp)
{
    CString return_temp; //声明返回变量
    CString szAnsi = str_temp; //要进行转换编码的字符串

    int wcsLen = ::MultiByteToWideChar(CP_ACP, NULL, szAnsi, strlen(szAnsi), NULL, 0); //获得所需空间大小
    wchar_t * wszString = new wchar_t[wcsLen+1]; //声明wchar_t变量,用于保存转换后的值
    ::MultiByteToWideChar(CP_ACP, NULL, szAnsi, strlen(szAnsi), wszString, wcsLen); //进行转换
    wszString[wcsLen] = '\0'; //加上结束符

    char *buf = (char *)malloc(wcsLen*2); //分配空间到变量
    buf =(char *)wszString; //定义变量
    //AfxMessageBox(buf);

    for(int i=0;i<wcsLen*2;i++) //用循环输出信息到编辑框
    {
        str_temp.Format("%2.2x", buf[i]); //转成十六进制格式
        str_temp = str_temp.Right(2); //取右二位
        return_temp = return_temp + str_temp + " "; //用空格隔开
        //AfxMessageBox(return_temp);

    }

//#ifdef _DEBUG
    CFile cFile;
    cFile.Open(_T("ansitounicode.txt"), CFile::modeWrite | CFile::modeCreate);
    //文件开头
    cFile.SeekToBegin();
    //写入内容
    cFile.Write("\xff\xfe", 2);
    cFile.Write(wszString, wcsLen * sizeof(wchar_t));
    cFile.Flush();
    cFile.Close();

//#endif

    delete[] wszString;
    wszString =NULL;
    return return_temp;
}

CString CChange::Encode_unicodetoansi(CString str_temp)
{
    
    CString return_temp; //声明返回变量
    char *endptr; //暂末用到
    char string1[2], string2[2]; //用于存放两个字节

    char *str_char = str_temp.GetBuffer(str_temp.GetLength()); //声明一个指针,指向字符串所映射的内存

    //if(str_temp.GetLength() == 0 || 0 != str_temp.GetLength()%4) //简单的异常处理
    //{
        //AfxMessageBox("You string have lost some letter! Please input again!");
        //return "";
    //}

    wchar_t * wszString = new wchar_t[str_temp.GetLength()/4+1]; //声明wchar_t变量(unsigned short)
    for(int i = 0;i < str_temp.GetLength()/4;i++) //对两个两个数据进行处理
    {
        //memcpy(string1, str_char+4*i, 2); //将str_char中的数据的2个字节复制到string1
        //memcpy(string2, str_char+2+4*i, 2);
        string1[0] = str_temp[i*4];
        string1[1] = str_temp[i*4+1];
        string2[0] = str_temp[i*4+2];
        string2[1] = str_temp[i*4+3];
        CString string3;
        string3.Format("%c%c%c%c", string2[0],string2[1],string1[0],string1[1]);
        //memcpy(string3, string2, 2);
        //memcpy(string3+2, string1, 2); //复制4个字节数据到string3
        long num = strtol(string3, &endptr, 16);
        wszString[i] = num; //转成16进制存入数组
    }
    wszString[str_temp.GetLength()/4] = '\0'; //插入结束符

    int ansiLen = str_temp.GetLength()/4; //目录字符数据大小
    for(int j=0; j < str_temp.GetLength()/4; j++)
    {
        if(wszString[j]>256)
            ansiLen++;
    }

    //int ansiLen = ::WideCharToMultiByte(CP_ACP, NULL, wszString, wcslen(wszString), NULL, 0, NULL, NULL);
    char* szAnsi = new char[ansiLen + 1]; //声明保存数据变量
    ::WideCharToMultiByte(CP_ACP, NULL, wszString, wcslen(wszString), szAnsi, ansiLen, NULL, NULL); //进行转换
    szAnsi[ansiLen] = '\0'; //赋结束符

    return_temp = szAnsi; 

//#ifdef _DEBUG
    CFile cFile;
    cFile.Open(_T("unicodetoansi.txt"), CFile::modeWrite | CFile::modeCreate);
    //文件开头
    cFile.SeekToBegin();
    //写入内容
    cFile.Write(szAnsi, ansiLen * sizeof(char));
    cFile.Flush();
    cFile.Close();

//#endif

    delete[] szAnsi;
    szAnsi =NULL;
    return return_temp;
}

CString CChange::Encode_ansitoutf8(CString str_temp)
{
    CString return_temp; //声明返回变量
    CString szAnsi = str_temp; //要进行转换编码的字符串

    int wcsLen = ::MultiByteToWideChar(CP_ACP, NULL, szAnsi, strlen(szAnsi), NULL, 0); //获得所需空间大小
    wchar_t * wszString = new wchar_t[wcsLen+1]; //声明wchar_t变量,用于保存转换后的值
    ::MultiByteToWideChar(CP_ACP, NULL, szAnsi, strlen(szAnsi), wszString, wcsLen); //进行转换
    wszString[wcsLen] = '\0'; //加上结束符
//到此时wszString里已经是转成unicode编码的数据了,接下来就只要将unicode编成utf-8就可以了

    //wchar_t* wszString = L"中国a"; //测试用的数据
    int u8Len = ::WideCharToMultiByte(CP_UTF8, NULL, wszString, wcslen(wszString),NULL, 0,NULL,NULL); //所需数据大小
    char* szU8 = new char[u8Len+1]; //保存utf-8编码数据
    //UTF8虽然是Unicode的压缩形式,但也是多字节字符串,所以可以以char的形式保存
    //unicode版对应的strlen是wcslen
    ::WideCharToMultiByte(CP_UTF8, NULL, wszString, wcslen(wszString), szU8, u8Len, NULL, NULL); //进行 utf-8转码
    szU8[u8Len] = '\0'; //加上结束符
    //MessageBox不支持UTF8,所以只能写文件
    //return_temp = szU8; //将数据赋给 返回值变量

    for(int i=0;i<u8Len;i++) //用循环输出信息到编辑框
    {
        str_temp.Format("%2.2x", szU8[i]); //转成十六进制格式
        str_temp = str_temp.Right(2); //取右二位
        return_temp = return_temp + str_temp + " "; //用空格隔开
        //AfxMessageBox(return_temp);

    }


//#ifdef _DEBUG
    //写文本文件,UTF8的BOM是0xbfbbef
    CFile cFile;
    cFile.Open(_T("ansitoutf8.txt"), CFile::modeWrite | CFile::modeCreate);
    cFile.SeekToBegin();
    cFile.Write("\xef\xbb\xbf", 3);//写BOM,同样低位写在前
    cFile.Write(szU8, u8Len*sizeof(char));
    cFile.Flush();
    cFile.Close();

//#endif
    delete[] szU8;
    szU8 = NULL;

    return return_temp;
}


CString CChange::Encode_utf8toansi(CString str_temp)
{
    CString return_temp; //声明返回变量
    char *endptr; //暂末用到
    //char* szU8 = "abcd1234\xe4\xbd\xa0\xe6\x88\x91\xe4\xbb\x96\x00"; //测试数据
    char *szU8 = new char[str_temp.GetLength()/2+1]; //存放要转换的数据

    char string1[1]; //用于存放两个字节
    char * str_char  = str_temp.GetBuffer(str_temp.GetLength()); //声明一个指针,指向字符串所映射的内存
    str_temp.ReleaseBuffer(); //释放对象

    for(int i = 0;i < str_temp.GetLength()/2;i++) //两位两位的处理,将字符串转成十六进制存储
    {
        memcpy(string1, str_char+i*2, 2);
        szU8[i] = (char)strtol(string1, &endptr, 16);

    }
    szU8[str_temp.GetLength()/2] = '\0'; //加入结束符
  
    int wcsLen = ::MultiByteToWideChar(CP_UTF8, NULL, szU8, strlen(szU8),NULL, 0); //获取常量大小
    wchar_t* wszString = new wchar_t[wcsLen+1]; //保存数据的变量
    ::MultiByteToWideChar(CP_UTF8, NULL, szU8, strlen(szU8), wszString, wcsLen); //多位转字节
    wszString[wcsLen] = '\0'; //加入结束符

    int ansiLen = ::WideCharToMultiByte(CP_ACP, NULL, wszString, wcslen(wszString), NULL, 0, NULL, NULL); //获取常量大小
    char* szAnsi = new char[ansiLen+1]; //声明保存数据变量
    ::WideCharToMultiByte(CP_ACP, NULL, wszString, wcslen(wszString), szAnsi, ansiLen, NULL, NULL); //进行转换
    szAnsi[ansiLen] = '\0'; //赋结束符
    return_temp = szAnsi; 

//#ifdef _DEBUG
    CFile cFile;
    cFile.Open(_T("utf8toansi.txt"), CFile::modeWrite | CFile::modeCreate);
    //文件开头
    cFile.SeekToBegin();
    //写入内容
    cFile.Write(szAnsi, ansiLen * sizeof(char));
    cFile.Flush();
    cFile.Close();

//#endif

    delete[] szAnsi;
    delete[] szU8;
    szU8 = NULL;
    szAnsi =NULL;
    //AfxMessageBox(return_temp);
    return return_temp;
}

 

转载于:https://www.cnblogs.com/pythonschool/archive/2012/12/14/2817883.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
站长工具功能简介1、JS加密/解密(将代码以js形式进行加密或解密。)2、UTF-8编码转换工具(UTF-8编码转换。)3、Unicode编码转换工具(Unicode编码转换。)4、友情链接(通过本工具可以批量查询指定网站的友情链接在百度的收录、百度快照、PR以及对方是否链接本站,可以识破骗链接。)5 、META信息检测(通过本工具可以快速检测网页的META标签,分析标题、关键词、描述等是否有利于搜索引擎收录。)6、MD5加密工具(对字符串进行MD5加密。)7 、sfz号码值查询(查询sfz所在地、性别及出生日期。)8、HTML/UBB代码转换工具(HTML/UBB代码转换。)9、HTML/JS互转工具(HTML/JS互转。)10 、搜索蜘蛛、机器人模拟工具(通过本工具可以快速模拟搜索引擎蜘蛛访问页面所抓取到的内容信息!)11、关键词密度检测(通过本工具可以快速检测页面关键词出现的数量和密度,更适合蜘蛛的搜索。)12、国家域名查看(查看所有国家的域名。)13、邮编区号查询(查询各地区的邮编及其区号,支持模糊查询。)14、域名Whois查询工具(Whois 简单来说,就是一个用来查询域名是否已经被注册,以及注册域名的详细信息的数据库(如域名所有人、域名注册商、域名注册日期和过期日期等)。通过域名Whois查询,可以查询域名归属者联系方式,以及注册和到期时间。)15、死链接检测/全站PR查询(通过本工具可以快速测试网站的死链接。死链接 - 也称无效链接,即那些不可达到的链接。一个网站存在死链接不是什么好事,首先一个网站如果存在大量的死链接,必将大大损伤网站的整体形象,再者搜索引擎蜘蛛是通过链接来爬行搜索,如果太多链接无法到达,不但收录页面数量会减少,而且你的网站在搜索引擎中的权重会大大降低。该查询可以遍历指定网页的所有链接,并分析每个链接的有效性,找出死链接。)16、搜索引擎收录查询(通过本工具可以快速查询各大搜索引擎对网站的收录数量!)17、搜索引擎反向链接(通过本工具可以快速查询各大搜索引擎对网站的反向连接数量!)18、查询手机号码归属地(查询手机号码的归属地及其手机号类型。)19、SEO综合查询(SEO综合查询。)20 、PR值查询(PR值全称为PageRank(网页级别),取自Google的创始人LarryPage。它是Google排名运算法则(排名公式)的一部分,是Google用于用来标识网页的等级/重要性的一种方法,是Google用来衡量一个网站的好坏的唯一标准。在揉合了诸如Title标识和Keywords标识等所有其它因素之后,Google通过PageRank来调整结果,使那些更具“等级/重要性”的网页在搜索结果中令网站排名获得提升,从而提高搜索结果的相关性和质量。)21、关键词排名查询(通过关键词排名查询,可以快速得到当前网站的关键字在Baidu/Google收录的排名情况!有些关键词在各地的排名是不一样的,就是通常说的关键字地区排名。比如:新闻、人才等很多。所以才提供多个地点的服务器提供大家查询。)22、IP查询(通过该工具可以查询指定IP的物理地址或域名服务器的IP和物理地址,及所在国家或城市,甚至精确到某个网吧,机房或学校等;查出的结果仅供参考!)23、Google收录查询(查询谷歌收录情况。)24、友情链接查询工具(通过本工具可以批量查询指定网站的友情链接在百度的收录、百度快照、PR以及对方是否链接本站,可以识破骗链接。)25、友情链接IP查询工具(通过本工具可以批量查询网站友情链接站点的IP地址、服务器物理地址,帮助站长清楚了解友情链接的服务器物理定位。)26、域名删除查询(.com .net .org等国际域名删除时间,通常在域名到期后的第65或75天,凌晨2点30左右会删除国内域名的删除时间,通常在域名到期后的第15或16天,凌晨4:30会删除友情提示:域名删除时间仅供参考,谢谢!)27、百度收录查询(本工具为站长提供指定时间内百度搜索对指定网站的收录情况,包括收录的网页数量和网页的具体情况,让您更好地掌握百度搜索对您的网站收录情况。)28、PR输出值查询(查询网站的PR输出值,PR输出值:带给友情链接的PR值。计算公式:(1 - 0.85) 0.85 * (PR值 / 外链数)。)29、查看网页代码(通过本工具可以快速查找指定网站的页面代码。)30、Unix时间戳(Unix timestamp)转换工具(什么是Unix时间戳(Unix timestamp): Unix时间戳(Unix timestamp),或称Unix时间(Unix time)、POSIX时间(POSIX time),是一种时间表示方式,定义为从格林威治时间1970年01月01日00时00分00秒起至现在的总秒数。Unix时间戳不仅被使用在Unix系统、类Unix系统中,也在许多其他操作系统中被广告采用。)
c 音频转换器是一种用于将音频文件转换为不同格式或编码工具,使用户能够在不同设备或平台上播放音频文件。其码是指实现这种转换功能的程序代码。 c 音频转换器的码通常包含以下几个方面的功能实现: 1. 音频文件读取:码会包含一段代码用于读取输入的音频文件。这部分代码需要处理不同音频格式的文件,并将其解析为内部数据结构或缓冲区。 2. 音频格式转换码中会包含一段代码用于将读取到的音频数据进行格式转换。这可以包括音频编码格式的转换、采样率的转换以及声道数的转换等。 3. 音频编码:如果需要将音频文件以不同编码进行存储或传输,码将包含一段代码用于进行音频编码。这可以包括常见的编码算法如MP3、AAC等。 4. 音频写入:码还需要包含将处理后的音频数据写入目标音频文件的代码。这一部分代码需要处理不同格式和编码的文件写入方式,确保生成的文件能够被常见的音频播放器或设备所识别和播放。 此外,c 音频转换器的码还可能包含异常处理、进度控制、用户界面等功能。在实际开发中,还需要考虑性能优化、内存管理和代码可维护性等因素。 总之,c 音频转换器的码是一段用于实现音频格式转换的程序代码,涵盖读取、转换编码和写入等功能。它可以帮助用户将音频文件转换为不同的格式和编码,以适应不同的设备和平台的需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值