如何将字符串变量转换为宽字符串变量?

蓝鹰 2012-02-23 02:05:19
大家都知道,
L"you are crazy"
就是把"you are crazy"这个字符串中的字符转换为宽字符
但是如果这样写

string 变量名;
L变量名;

或者
char *变量名;
L变量名;

就行不通了,请问有什么函数能实现这样的转换吗?
...全文
480 16 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2012-03-02
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 blackeaglex 的回复:]
引用 10 楼 zhao4zhong1 的回复:

linux:iconv
Windows:MultiByteToWideChar

谢谢,但是我在msdn中看了下这个函数的参数列表,懵了
[/Quote]
参考这个,虽然是VB6:
Private Declare Function MultiByteToWideChar Lib "kernel32" (ByVal CodePage As Long, ByVal dwFlags As Long, ByRef lpMultiByteStr As Any, ByVal cchMultiByte As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long) As Long
Private Declare Function WideCharToMultiByte Lib "kernel32" (ByVal CodePage As Long, ByVal dwFlags As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long, ByRef lpMultiByteStr As Any, ByVal cchMultiByte As Long, ByVal lpDefaultChar As Long, ByVal lpUsedDefaultChar As Long) As Long
'常用的代码页:
const cpUTF8 =65001
const cpGB2312 = 936
const cpGB18030=54936
const cpUTF7 =65000
Function MultiByteToUTF16(UTF8() As Byte, CodePage As Long) As String
Dim bufSize As Long
bufSize = MultiByteToWideChar(CodePage, 0&, UTF8(0), UBound(UTF8) + 1, 0, 0)
MultiByteToUTF16 = Space(bufSize)
MultiByteToWideChar CodePage, 0&, UTF8(0), UBound(UTF8) + 1, StrPtr(MultiByteToUTF16), bufSize
End Function

Function UTF16ToMultiByte(UTF16 As String, CodePage As Long) As Byte()
Dim bufSize As Long
Dim arr() As Byte
bufSize = WideCharToMultiByte(CodePage, 0&, StrPtr(UTF16), Len(UTF16), 0, 0, 0, 0)
ReDim arr(bufSize - 1)
WideCharToMultiByte CodePage, 0&, StrPtr(UTF16), Len(UTF16), arr(0), bufSize, 0, 0
UTF16ToMultiByte = arr
End Function

Private Sub Command1_Click()
MsgBox MultiByteToUTF16(UTF16ToMultiByte("ab中,c", cpUTF8), cpUTF8)
End Sub

蓝鹰 2012-02-23
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 zhao4zhong1 的回复:]

linux:iconv
Windows:MultiByteToWideChar
[/Quote]
谢谢,但是我在msdn中看了下这个函数的参数列表,懵了
蓝鹰 2012-02-23
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 jordancar 的回复:]

直接转就行了。这个不涉及到精度损失.
[/Quote]
你说的对,如果从ansi字符转换向宽字符,可以用(wchar_t*),但是如果反过来貌似只能用WideCharToMultiByte
了,只是,我看了它的参数列表,感觉好复杂啊。太麻烦了
蓝鹰 2012-02-23
  • 打赏
  • 举报
回复
回复楼上:
wchar_t *pw = (wchar_t *)p1;
我试过,这中做法是行不通的,根据我的理解,这样转换的是地址,而字符本身不会被转换为宽字符
majia2011 2012-02-23
  • 打赏
  • 举报
回复
char *p="aaaa";
char p1[256];

p1[0]=p[0];
p1[1]=0;
p1[2]=p[1];
p1[3]=0;
p1[4]=p[1];
p1[5]=0;
p1[6]=p[1];
p1[7]=0;
p1[8]=0;
p1[9]=0;

wchar_t *pw = (wchar_t *)p1;

自己完善下,有时间可以上网学习下别的转化算法。不用api自己搞得,都是极端情况,先熟练使用api吧。
小布 2012-02-23
  • 打赏
  • 举报
回复
直接转就行了。这个不涉及到精度损失.
赵4老师 2012-02-23
  • 打赏
  • 举报
回复
linux:iconv
Windows:MultiByteToWideChar
蓝鹰 2012-02-23
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 blackeaglex 的回复:]

简单地说,我就是想知道宽字符串变量和普通字符串变量自己怎么转换?
[/Quote]
或者说如何将char *转化为wchar_t *?
luciferisnotsatan 2012-02-23
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 blackeaglex 的回复:]

简单地说,我就是想知道宽字符串变量和普通字符串变量自己怎么转换?
[/Quote]
WideCharToMultiByte
MultiByteToWideChar
ppsharp 2012-02-23
  • 打赏
  • 举报
回复
MultiByteToWideChar

http://www.cppblog.com/sunraiing9/archive/2007/03/21/20281.html
蓝鹰 2012-02-23
  • 打赏
  • 举报
回复
简单地说,我就是想知道宽字符串变量和普通字符串变量自己怎么转换?
luciferisnotsatan 2012-02-23
  • 打赏
  • 举报
回复
typedef basic_string<wchar_t> wstring;
typedef basic_string<char> string;

luciferisnotsatan 2012-02-23
  • 打赏
  • 举报
回复
不知道lz想问什么,string和char本身就不是宽字节的。
wchar_t
basic_string<wchar_t>
这些对应L""

Jim_King_2000 2012-02-23
  • 打赏
  • 举报
回复
string的宽字符版本叫做wstring。
wstring wstr(L"abc");
蓝鹰 2012-02-23
  • 打赏
  • 举报
回复
急求答案,麻烦大侠们来帮帮忙啊

65,187

社区成员

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

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