字符串转换问题

wangsiyuanoo 2008-10-14 04:17:27
CString m_sendbuf;
char sendbuf[1024] = {0};
memcpy(sendbuf, m_sendbuf, strlen((LPCWSTR)m_sendbuf));
出现问题:error C2664: 'strlen' : cannot convert parameter 1 from 'LPCWSTR' to 'const char *'

ps:使用的是Unicode字符集

到底应该如何转换呢?
...全文
83 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
jackzhhuang 2008-10-15
  • 打赏
  • 举报
回复
对了,把wcstombs()反过来写mbstowcs()就是把ANSI字符转为UNICODE字符。
jackzhhuang 2008-10-15
  • 打赏
  • 举报
回复
可以一开始就用wchar_t,即char sendbuf[1024] = {0}; 改为wchar_t sendbuf[1024] = {0};

当然,其实在windows编程中普遍的做法是用TCHAR,即TCHAR sendbuf[1024] = {0};

系统若是定义了UNICODE,那么TCHAR就是UNICODE字符,若没有定义UNICODE,则TCHAR就是ANSI字符,楼主应该养成这个习惯,这样代码更灵活。

当然,实在非得要char不可,介绍你一个简单的函数wcstombs(),该函数很直接的把UNICODE字符转为ANSI字符。
study_live 2008-10-15
  • 打赏
  • 举报
回复

CString m_sendbuf;
char sendbuf[1024] = {0};
memcpy(sendbuf, m_sendbuf.GetBuffer(), m_sendbuf.GetLength());


CString自带计算长度的函数
study_live 2008-10-14
  • 打赏
  • 举报
回复
int MultiByteToWideChar(
UINT CodePage,
DWORD dwFlags,
LPCSTR lpMultiByteStr,
int cbMultiByte,
LPWSTR lpWideCharStr,
int cchWideChar
);

用这个函数将char转换成unicode就可以了, 参数查看MSDN

示例:

// Convert ANSI user name and domain to Unicode

MultiByteToWideChar( CP_ACP, 0, UserName,
strlen(UserName)+1, wszUserName,
sizeof(wszUserName)/sizeof(wszUserName[0]) );

woaiyu_liang 2008-10-14
  • 打赏
  • 举报
回复
strlen(const char *)—— 要求其实参为const char *或者char *
xkyx_cn 2008-10-14
  • 打赏
  • 举报
回复

#include <atlconv.h>

CString m_sendbuf;
char sendbuf[1024] = {0};
USES_CONVERSION;
char* p = T2A((LPCTSTR)m_sendbuf);
memcpy(sendbuf, p, strlen(p)+1);

xhs_lh04 2008-10-14
  • 打赏
  • 举报
回复
memcpy(sendbuf, m_sendbuf, strlen((char *)m_sendbuf));

65,208

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧