linux下c++编程 转码 GBKTOUTF8问题
#include "setup.h"
#define __cdn_win32_platform__
#define CP_GB2312 20936
class CodingTransformer
{
public:
// UTF-8 TO GB2312
int UTF_8ToGB2312(char* pOut, int iBufSize, char *pText, int iLenth);
//GB2312 TO UTF-8
int GB2312ToUTF_8(char* pOut, int iBufSize,char *pText, int iLenth);
};
int CodingTransformer::UTF_8ToGB2312(char* pOut, int iBufSize, char *pText, int pLen)
{
#ifdef __cdn_win32_platform__
WCHAR* pWtemp = new WCHAR[pLen];
int iWcharLenth = ::MultiByteToWideChar(CP_UTF8,0,pText,-1,pWtemp,pLen);
if (0 == iWcharLenth)
{
DWORD dwLastErr = GetLastError();
printf("alexaroma:CodingTransformer err,err:%d\n", dwLastErr);
delete pWtemp;
return 0;
}
int iMultByteLenth = ::WideCharToMultiByte(CP_GB2312, NULL, pWtemp,
iWcharLenth, pOut,
iBufSize, NULL, NULL);
if (0 == iMultByteLenth)
{
DWORD dwLastErr = GetLastError();
printf("alexaroma:CodingTransformer err,err:%d\n", dwLastErr);
delete pWtemp;
return 0;
}
delete pWtemp;
return iMultByteLenth;
#else//__cdn_win32_platform__
iconv_t cd;
int rc;
char **pin = &pText;
char **pout = &pOut;
int outlen = iBufSize;
cd = iconv_open("GB2312","UTF-8");
if(cd==0)return -1;
memset(pOut,0,strlen(pOut));
if(iconv(cd,pin,(size_t *)&pLen,pout,(size_t *)&outlen) == -1)
{
iconv_close(cd);
return outlen;
}
iconv_close(cd);
return -1;
#endif//__cdn_win32_platform__
}
int CodingTransformer::GB2312ToUTF_8(char* pOut, int iBufSize, char *pText, int pLen)
{
#ifdef __cdn_win32_platform__
WCHAR* pWtemp = new WCHAR[pLen];
int iWcharLenth = ::MultiByteToWideChar(CP_GB2312, MB_PRECOMPOSED,
pText, -1, pWtemp, pLen);
if (0 == iWcharLenth)
{
DWORD dwLastErr = GetLastError();
printf("alexaroma:CodingTransformer err,err:%d\n", dwLastErr);
delete pWtemp; return 0;
}
int iMultByteLenth = ::WideCharToMultiByte(CP_UTF8, 0, pWtemp,
iWcharLenth, pOut,
iBufSize, NULL, NULL);
if (0 == iMultByteLenth)
{
DWORD dwLastErr = GetLastError();
printf("alexaroma:CodingTransformer err,err:%d\n", dwLastErr);
delete pWtemp;
return 0;
}
delete pWtemp;
return iMultByteLenth;
#else//__cdn_win32_platform__
iconv_t cd;
int rc;
char **pin = &pText;
char **pout = &pOut;
int outlen = iBufSize;
cd=iconv_open("UTF-8","GB2312");
if(cd==0)return -1;
memset(pOut,0,strlen(pOut));
if(iconv(cd,pin,(size_t *)&pLen,pout,(size_t *)&outlen) == -1)
{
iconv_close(cd);
return outlen;
}
iconv_close(cd);
return -1;
#endif//__cdn_win32_platform__
}
setup.h:
#ifndef SC_SETUP_H
#define SC_SETUP_H
#include "../ScriptMgr.h"
#include "Cell.h"
#include "CellImpl.h"
#include "GridNotifiers.h"
#include "GridNotifiersImpl.h"
#include "Unit.h"
#include "GameObject.h"
#include "sc_creature.h"
#include "sc_gossip.h"
#include "sc_instance.h"
#include "CombatAI.h"
#include "PassiveAI.h"
#include "Chat.h"
#include "DBCStructure.h"
#include "DBCStores.h"
#ifdef WIN32
#include <windows.h>
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
return true;
}
#endif
#endif
/*
//TODO:UTF8
char* Utf8ToGBK(const char* strUtf8);
char* GBKToUtf8(const char* strGBK);
*/
#define __cdn_win32_platform__
#define CP_GB2312 20936
//UTF-8 TO GB2312
int UTF_8ToGB2312(char* pOut, int iBufSize, char *pText, int iLenth);
//GB2312 TO UTF-8
int GB2312ToUTF_8(char* pOut, int iBufSize, char *pText, int iLenth);
Onescript.cpp:
#define GOSSIP_TEXT_TAVERN GB2312ToUTF_8(" 【主菜单】")
以上代码可以WIN下用也可以在LINUX下用
可是编译出错:
Onescript.cpp.cpp(358) : error C2660: “GB2312ToUTF_8”: 函数不接受 1 个参数
主要是我不懂C++,请教高人给修改修改!
相关推荐
C++实现编码转换[源码]
本文介绍了如何使用C++实现UTF-8和GBK编码字符串之间的互相转换,适用于不同系统或服务器间的消息传递。在Windows环境下,利用<windows.h>头文件中的MultiByteToWideChar和WideCharToMultiByte函数进行转换;而在Linux环境下,则使用<iconv.h>头文件中的iconv函数族完成编码解析。文章提供了完整的代码示例,包括GbkToUtf8和Utf8ToGbk两个核心函数的实现,并展示了如何在主函数中调用这些函数进行编码转换。此外,还给出了在Windows和Linux系统中查看默认编码的方法,如Windows的chcp命令和Linux的locale命令。
C++高性能汉字转拼音库实战:从原理到工程集成
汉字转拼音是中文信息处理中的基础技术,其核心原理是将汉字字符映射到对应的拼音音节,并解决多音字消歧等关键问题。这项技术的价值在于为搜索引擎、输入法、语音合成等应用提供底层支持,直接影响系统的处理效率和准确性。在工程实践中,高性能场景对转换速度有苛刻要求,C++凭借其接近硬件的执行效率和精细的内存控制能力,成为实现这类基础组件的理想选择。通过哈希表、Trie树等数据结构优化查询性能,结合CMake构建工具和现代C++ API设计,可以打造出易于集成、功能完备的工业级解决方案。本文以实际项目为例,深入探讨了C+
console_gbk2utf8_dutf82gbk.zip
c++跨平台utf8转gbk编码互相转换 在windows下用<windows.h>头文件里的函数进行多字节和宽字符转换, linux下采用<iconv.h>头文件里的函数进行编码互相解析。
基于非对称纳什谈判的多微网电能共享运行优化策略(Matlab代码实现)
基于非对称纳什谈判的多微网电能共享运行优化策略(Matlab代码实现)内容概要:本文档标题为《Plecs全桥LLC谐振变换器仿真模型.txt》,但实际上内容并未围绕Plecs或全桥LLC谐振变换器展开详细论述,而是罗列了大量基于Matlab/Simulink和Python的科研仿真项目标题及相关技术方向,涵盖电力系统、无人机控制、微电网优化、路径规划、状态估计、信号处理、电动汽车调度、电力电子变换器等多个领域。其中包括多种优化算法(如粒子群、遗传算法、NSGA-II)、控制策略(如PID、MPC、滑模控制)、仿真建模(如LLC谐振变换器、DAB变换器、PWM整流器)以及具体应用场景的研究实现。尽管提及“隔离型全桥LLC谐振变换器建模及参数设计资料”,但全文缺乏对该主题的具体描述、模型细节或仿真分析,仅作为条目之一出现。因此,该文档实质是一份科研项目资源清单或代码合集目录,而非针对某一主题的深入文章。; 适合人群:具备一定Matlab/Simulink或Python编程基础,从事电气工程、自动化、控制科学、电力电子、新能源系统等相关领域的研究生、科研人员及工程技术人员。; 使用场景及目标:①为科研工作者提供丰富的课题参考与复现资源,涵盖优化调度、控制系统设计、电力电子仿真等方向;②辅助完成硕士/博士论文、期刊论文复现、课程设计或项目开发,提升研究效率与创新性;③通过已有模型和代码快速搭建仿真平台,聚焦算法改进与性能优化。; 阅读建议:此文档应作为科研资源索引使用,读者可根据自身研究方向筛选相关条目,结合配套代码与参考资料进行深入学习与实践。对于希望研究全桥LLC谐振变换器的用户,需注意本文档未提供完整内容,建议查找标注的“仿真+设计报告+计算书”等附件资源以获取详细信息。
高校技术转移办公室在推动成果转化过程中,如何高效完成技术成果的信息整合与价值挖掘.docx
科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。


