首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

char *转化成unsigned short *型解决思路

2012-03-26 
char *转化成unsigned short *型问题如题目,如何将char数组转化成unsigned short型,由于操作的是汉字,所以

char *转化成unsigned short *型
问题如题目,如何将char数组转化成unsigned short型,由于操作的是汉字,所以之前的函数都是unsigned short型传参的
我写的转化代码如下,请高人指教,谢谢!

C/C++ code
char temp[10] = "试一试";DWORD dwNum = MultiByteToWideChar (CP_ACP, 0, temp, -1, NULL, 0);unsigned short *w = new unsigned short [dwNum];MultiByteToWideChar (CP_ACP, 0, temp, -1, w, dwNum);


用的是VS2010,可是提示IntelliSense: argument of type "unsigned short *" is incompatible with parameter of type "LPWSTR",unsigned short不是两个字节吗?LPWSTR也是两个字节啊!为什么过不去呢?

正确的应该怎么转换啊?

[解决办法]
干嘛不用wchar_t,这个才是宽字符的类型。
[解决办法]
我没看明白么?

char temp[10] = "试一试";
DWORD dwNum = MultiByteToWideChar (CP_ACP, 0, temp, -1, NULL, 0);
unsigned short *w = new unsigned short [dwNum];
MultiByteToWideChar (CP_ACP, 0, temp, -1, (LPWSTR)w, dwNum);
WCHAR wTemp[10];
memcpy(wTemp,w,sizeof(WCHAR)*dwNum);
[解决办法]
@楼上
第一遍是获得长度 这就是这个API最淡疼的地方。

话说为什么一定要用ushort呢?直接用wchar_t不行么?
[解决办法]
@7楼 强制转换正解。不过这个函数我好像每次用都是调用两次的说……感觉如果第一次不获得长度,这个API内部会坏掉?求解

@楼上。调成release试试。怎么被奇怪的程序重载了new操作符呢
[解决办法]
探讨
引用:
你说的这个强制转换我试了,没有语法错误了,可是编译时会报错:
Error 17 error LNK2005: "void * __cdecl operator new[](unsigned int)" (??_U@YAPAXI@Z) already defined in libcpmt.lib(newaop.obj);
Error 18 error LNK1169: one or more multiply defined symbols found.

[解决办法]
字符串结尾的 \0 是否也要处理一下?
[解决办法]
探讨
首先感谢各位解答,你们说的方法我基本上都想到了,也都试了,我用的就是release下的编译,还有我调试多少次都是那样的错误提示,这是在链接时的错误,比较复杂,不晓得为什么。。。
换成unsigned short *w =(unsigned short*) new short [dwNum];

依旧是编译报错

至于12L说的字符串结尾不用处理,因为char数组每个存储一个字节,而uns……

热点排行