WideCharToMutiByte出现中文乱码

使用CSplitterWnd 分割窗体 原文:http://www.codeproject.com/KB/splitter/splitterwindowtutorial.aspx本文PDF下载地址:http://download.youkuaiyun.com/source/886416 图 1简介本文主要是对MFC中CSplitterWnd的用法做个简要介绍。我找了很久相关资料都没有找到适合新手的相关文章。希望本文能够帮助有 阅读详情

这个小问题困了我一天一夜了,本来今天都计划写XML处理的代码了,结果又耽搁了一天。幸好后头还搞出来了。

我想写个程序,通过SOCKET获得服务器的XML文件,然后保存到本地。获取文件是搞定了,但是保存成文件时老出现乱码。

以下是会出现乱码的代码片断:

void CTecClientDlg::OnBnClickedbtnlogin()
{
    // TODO: 登陆按钮,登陆后下载数据。
   WORD version;
   WSADATA wsaData;
   int rVal=0;
   version=MAKEWORD(1,1);
   WSAStartup(version,(LPWSADATA)&wsaData); 
   SOCKET theSocket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
   if(theSocket==SOCKET_ERROR)
   {
       return;
   }
   SOCKADDR_IN serverInfo;
   serverInfo.sin_family=PF_INET;
   serverInfo.sin_addr.s_addr=inet_addr("192.168.0.3");
   serverInfo.sin_port=htons(6603);
   rVal=connect(theSocket,(LPSOCKADDR)&serverInfo,sizeof(serverInfo));
   if(rVal==SOCKET_ERROR)
   {
       return;
   }
   //==========================关键是这个片段
   CFile xmlFile(_T("Data.xml"),CFile::modeCreate|CFile::modeWrite);  
   wchar_t buf[200]; 
   int strLast=0;
   do{
        memset(buf,0,200*sizeof(wchar_t));
        strLast=recv(theSocket,(char*)buf,200*sizeof(wchar_t),0);
        if(strLast<=0)
        {//如果读取的长度不正常,退出循环。
            break;
        }  
        //倒数第三个参数为0,函数功能变为:返回buf的char类型容量。下面才好动态分配一个char*的内存空间。
        DWORD charLen=WideCharToMultiByte(CP_UTF8,0,buf,-1,NULL,0,NULL,FALSE);
        char* MutiByteBuf;
        MutiByteBuf=new char[charLen];
        WideCharToMultiByte(CP_UTF8,0,buf,-1,MutiByteBuf,charLen,NULL,FALSE);        
        xmlFile.Write(MutiByteBuf,charLen);      
        delete [] MutiByteBuf;  
   }while(strLast>0);
   xmlFile.Close();
   closesocket(theSocket);
   WSACleanup();
}

过程很辛苦,但结果很简单。

TIP:WideCharToMultiByte的第四个参数为-1,那么第三个参数buf的长度就是buf内容长度+一个NULL。

就是因为加的这个NULL导致我的程序在第二次循环后,时不时的出现乱码,非常恼火。

下面是可以正常工作的代码。

void CTecClientDlg::OnBnClickedbtnlogin()
{
    // TODO: 登陆按钮,登陆后下载数据。
   WORD version;
   WSADATA wsaData;
   int rVal=0;
   version=MAKEWORD(1,1);
   WSAStartup(version,(LPWSADATA)&wsaData);
   SOCKET theSocket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
   if(theSocket==SOCKET_ERROR)
   {
       return;
   }
   SOCKADDR_IN serverInfo;
   serverInfo.sin_family=PF_INET;
   serverInfo.sin_addr.s_addr=inet_addr("192.168.0.3");
   serverInfo.sin_port=htons(6603);
   rVal=connect(theSocket,(LPSOCKADDR)&serverInfo,sizeof(serverInfo));
   if(rVal==SOCKET_ERROR)
   {
       return;
   }
   CFile xmlFile(_T("Data.xml"),CFile::modeCreate|CFile::modeWrite);
   wchar_t buf[200];
   int strLast=0;
   do{
        memset(buf,0,200*sizeof(wchar_t));
        strLast=recv(theSocket,(char*)buf,200*sizeof(wchar_t),0);
        if(strLast<=0)
        {
            break;
        }
       /**

          *

          *就是这个地方,第四个参数我没有使用-1,而是使用了精确的长度 strLast/2,这样就不会在末尾追加了。

          *下面一处的调用也是一样的。

        **/
        DWORD charLen=WideCharToMultiByte(CP_UTF8,0,buf,strLast/2,NULL,0,NULL,FALSE);
        char* MutiByteBuf;
        MutiByteBuf=new char[charLen];
        WideCharToMultiByte(CP_UTF8,0,buf,strLast/2,MutiByteBuf,charLen,NULL,FALSE);
        xmlFile.Write(MutiByteBuf,charLen);
        delete [] MutiByteBuf; 
   }while(strLast>0);  
   xmlFile.Close(); 
   closesocket(theSocket);
   WSACleanup();
}
Android17车载音频进阶之H2XML定制Module(一百七十七) 目的:理解H2XML如何把Module接口和Key定义转换为ARC可用的元数据,并通过Graph、GKV、CKV和TKV驱动AudioReach用例配置。H2XML根据带注解的C头文件生成XML元数据。ARC使用这些元数据配置Module、Graph和参数,ACDB保存对应的Graph定义与Calibration数据,运行时由GSL和AML按Key Vector查询数据。H2XML负责生成配置所需的元数据,不负责执行CAPI Module中的算法。fill:#333;important; 阅读详情

相关推荐

Screenshot_2026-11-04-16-26-45-46.jpg

Screenshot_2026-11-04-16-26-45-46.jpg

WideCharToMultiByte

WideCharToMultiByte函数功能:把一个宽字符串的格式映射(Map)到一个新的字符串中。这个新字符串可以不属于多字节字符集(multibyte character set)。int WideCharToMultiByte( //【输入参数】CP_开头,比如CP_UTF8,我就使用的这个。当参数为CP_UTF8这个值时,最后两个参数都必须为0 //在

1633

【动态多智能体系统的通信感知编队控制】一种新颖的通信感知编队控制策略,用于动态多智能体系统研究(Matlab代码、Python代码实现)

内容概要:文档名为《Plecs全桥LLC谐振变换器仿真模型.txt》,但其内容并未深入介绍Plecs环境下全桥LLC谐振变换器的具体建模与仿真过程,而是呈现为一份涵盖多领域科研主题的资源列表。文档内容广泛涉及多智能体系统控制、无人机路径规划、电力电子变换器、状态估计、信号处理、优化算法等研究方向,并多次提及Matlab/Simulink、Python等工具的代码实现。整体来看,该文档更像是一份科研项目目录或技术资源索引,重点推介了包括LLC谐振变换器在内的多种控制系统与电力电子仿真模型,但对标题所述核心内容缺乏详尽的技术描述与实现细节。; 适合人群:电力电子、自动化、控制工程、信号处理及多智能体系统等相关领域的研究生、科研人员与工程技术人员。; 使用场景及目标:①为科研工作者提供跨学科的技术方向参考与研究选题灵感;②获取电力系统、无人机控制、信号处理等领域成熟的Matlab/Simulink或Python仿真代码资源,用于算法验证与模型复现。; 阅读建议:建议将此文档作为科研资源导航目录使用,读者可根据自身研究方向筛选感兴趣的主题,并通过文中提供的公众号或网盘链接获取完整的代码、仿真模型与配套资料进行深入学习与实践。

using namespace std;前缺少分号

编译器突然报这个错。#include "Model.h"using namespace std;我记得#include 后面不用加分号的,但是始终找不到地方,后来进Model.h去一看,原来是一个class定义最后少了个分号。。。

918

产业园区运营负责人如何提升企业技术需求与科研资源的精准匹配效率?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

机械设计师必看:如何用Autodesk Inventor高效完成钣金设计(附实战案例)

本文为机械设计师详细解析了如何利用Autodesk Inventor Professional高效完成钣金设计。文章通过一个钣金防护罩的实战案例,系统介绍了从核心设计逻辑、建模流程、参数化技巧到工程图输出的完整工作流,旨在帮助设计师掌握智能化的设计方法,显著提升从概念到制造的设计效率与准确性。

honey的博客 1182

windows socket编程

服务端C#   (VC#.NET 2005)private void button1_Click(object sender, EventArgs e) { if (this.textBox1.Text == "") { MessageBox.Show("请输入端口号!");

718

PX4无人机-Gazebo仿真实现动态目标追踪的视觉控制方案

本文详细介绍了PX4无人机在Gazebo仿真环境中实现动态目标追踪的视觉控制方案。从PX4与Gazebo仿真环境搭建、动态目标追踪核心技术栈、仿真环境深度定制技巧到追踪算法的优化实践,提供了全面的技术指导和常见问题排查方法,帮助开发者高效实现无人机视觉追踪功能。

weixin_29196315的博客 450

代码通过VC的DLL工程封装,由VC#的WINFORM工程调用

在VC的DLL项目中,需要定义一个函数 int Add(int,int);extern "C" __declspec(dllexport) int Add(int,int); 并实现这个函数。 在VC#的WINFORM工程中,引入System.RunTime.InteropSerivices在类中添加如下代码[DllImport("Brown.Core.dll",CharS

431

从厘米级到公里级:北斗网格10级精度在ArcPro中的完整应用指南

本文提供了北斗网格十级精度体系在ArcGIS Pro中的完整应用指南。详细解析了从660公里到1.5厘米的十级网格尺度及其编码逻辑,并重点演示了如何在ArcPro中生成网格、计算编码,以及根据项目需求(如滑坡监测)选择合适精度层级的实战策略。指南旨在帮助GIS专业人士利用这套统一的网格框架,高效管理多尺度空间数据并优化分析工作流。

Black的专栏 472

验证 helm Chart 的正确性

验证 helm Chart 的正确性

小橙子的笔记屋 281

头文件的二次包含

global.h#ifndef _GlobalDB#define _GlobalDB#include "Model.h"#include using namespace std;extern map tbPara;#endifglobal.cpp#include "global.h"#include "st

365

手把手教你学Simulink--电机控制架构与算法实现​场景示例:基于Simulink的电机速度环PID调节仿真

本文带你完成了电机速度环PID参数的科学整定,实现了:✅ 理解了速度环的级联系统特性与关键参数影响工程整定法(理论初值)系统辨识法(参数未知时)✅ PID Tuner自动调参(推荐!自动调参兼具快速性与鲁棒性✅ 学会了前馈补偿抗饱和等工程实用技巧。

MHD0815的博客 653

OPC UA 地址空间导入实践|XML 与 CSV 两条路径

部署OPC UA服务器时,核心瓶颈在于数据注入——地址空间结构设计与时间序列模拟。XML定义节点结构,需注意命名空间索引(应基于URI而非运行编号)及父子关系双向声明,改动后必须重启生效;CSV注入时序,按SourceTimestamp分组批量写入,建议使用nsu=URI;s=名称格式避免索引错位。推荐使用Prosys仿真服务器,结合UaModeler建模,实现高效、稳定的仿真部署。

MotroEngineer的博客 262

【开源电机驱动】位置环控制

这是三闭环里的最后一个:位置闭环控制。如果你认真的阅读并推导了前章节,那么这一节将会很好理解。一如既往,我会使用简练的语言来描述复杂的问题。本章节主要涉及位置环的一些概念,以及控制框图。文章不会涉及具体的代码。

BadBoyHolly的博客 6096

H3C交换机命令大全,分模块好记忆!

在深入命令之前,我们先来了解H3C交换机的命令行基础。<H3C>[H3C]常用基础命令如下:这些基础命令是操作H3C交换机的敲门砖,熟练掌握后,我们将按模块深入探讨更具体的配置命令。H3C交换机的命令可以按功能模块分类,包括系统管理、接口配置、VLAN操作、链路聚合、路由配置、安全管理等。

网络技术联盟站 783

JS XML验证及格式化处理

该代码提供XML验证、格式化及转换功能:isValidXML通过jQuery解析判断字符串是否为合法XML;formatXML对XML进行缩进美化,支持标签、文本、CDATA和注释;xmlToString将XML文档对象转为字符串;escapeHtml用于HTML转义。整体实现简洁,适用于前端XML处理场景。

程序就是世界 167

使用 Simulink + Simscape Electrical 实现一个三相半控桥式整流器的仿真模型

本文详细介绍了使用Simulink搭建三相半控桥式整流器仿真模型的方法。主要内容包括系统结构设计、建模步骤(从创建项目到参数配置)、移相触发控制的实现,以及阻感负载下的动态响应分析。通过合理设置三相电源、整流器模块、触发控制和测量模块,实现了输出电压和电流波形的仿真观测。文章还提供了优化建议,如添加滤波器、实时控制等改进方向,为电力电子变换器的仿真研究和性能优化提供了实用指导。

amy_mhd的博客 140

DOCX 降重怎么保持格式不变?OOXML 格式保持原理与实测

降重后格式是否保持,关键在于工具是否在OOXML文档结构层操作。纯文本处理(如复制粘贴)必丢格式;而支持上传DOCX、仅替换<w:t>文本节点、不改动样式与锚点的工具,可实现带格式降重。实测青研平台处理10万字论文,公式、图表、标题层级均完好,下载即交。建议选型时优先验证小样,确保仅文本变更,避免格式事故。

柳落青 47

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

8295 高通WFD配置详解XML结构

高通WFD配置文件核心为WFDConfig与WFDClient,前者统领全局,后者负责具体输出。关键在于合理配置WFDPort与WFDPipeline,确保一个QDI显示ID对应唯一端口ID,允许多客户端共享显示资源。通过eQDIDeviceID、eQDIDisplayID、uDisplayNode等参数精确控制显示区域与图层叠加,利用eZOrderBase和eZOrder实现分层合成。实际应用中需避免端口冲突,善用WFDDump工具分阶段验证,确保多客户端协同稳定输出。

车载行业 159

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

1,270 Star 的 Rust 笔记应用 Quiet.md:百万字敲键 5ms、零 Electron、存储格式选了飞书 DocxXML

开源笔记应用 Quiet.md(1,270 Star)用 Rust + GPUI(Zed 同款框架)纯 GPU 绘制,无 WebView 无 Electron:百万字文档敲键 P95 仅 5.78ms,安装包 18MB;存储格式选飞书 DocxXML,一篇笔记一个 XML 文件,Git/iCloud 同步友好,默认零联网。本文拆解其性能方法论、存储设计与给桌面应用开发者的选型启示。

话梅糖の优快云 Blog 340

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

pandas 读取 XLSX 时出现 XML 解析错误

记录 pandas 读取 XLSX 时的 XML 解析错误,说明如何保留原文件、核对工作表及报错位置,并在副本上检查修复影响。

ailx10 182

【码动四季·秋】不写 XML 就没有 SQL 注入了吗:MyBatis-Plus 无 XML 持久层的注入面治理

没有 XML 映射文件就自动免疫 SQL 注入?ArticlePilot 的 D5-1 安全自查证明这个说法只对了一半。无 XML 的 Wrapper 体系把注入入口物理收敛到 apply/last 两个 API,审计成本趋零,但排序字段等"结构位"仍是漏点。本文基于实仓三连扫描的真实命中输出(XML/${}/last-apply 三项,截图为命令实际执行结果)拆解:哪里天然安全、排序字段为何必须白名单、last() 拼接如何禁止、Spring @Value 的 ${} 误报怎么甄别,并给出可复用的注入面自

腾讯云创作之星、华为云云享专家,深耕电商全栈高并发系统实战,分享可商用商城项目源码。 431

WordPress 站点地图 sitemap.xml 404 或空白:先核 SEO 插件与固定链接,再查 CDN 与防火墙

WordPress 前台正常,但打开(或 SEO 插件给出的站点地图地址)却——这和昨日写过的 Cloudflare Flexible SSL /、以及近期的 Heartbeat / autoload、Woo 结账空白、memory exhausted、固定链接「全站伪静态 404」、WP-Cron、Redis、REST 401、媒体上传失败。这里首页、文章页往往都能打开,卡在:SEO 插件未真正启用或互斥、物理挡路、固定链接 rewrite 未刷新、CDN/WAF 对.xml拦截,或robots.txt。

20年技术经验|专注小程序+外贸独立站|已服务500家企业,分享创业中有趣的产品和技术经验。 344

Maven 构建产物 `.flattened-pom.xml` 解析与工程化规范

.flattened-pom.xml是Maven构建时由flatten-maven-plugin生成的派生文件,用于将开发态动态POM转化为发布态纯净依赖描述,解决变量解析及配置污染问题。该文件属构建产物,必须加入.gitignore并在IDEA中隐藏;若已误提交需通过git rm --cached清理。Maven 4引入原生Consumer POM后,该插件将逐步退场。

小李同学的博客 140
上一篇: WideCharToMultiByte
下一篇: using namespace std;前缺少分号
debug1984
博客等级 码龄22年 14粉丝 30原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值