关于宽字符转多字节的问题,求解
代码如下
其中MChar 定义为 char
wchar_t* szTempPath = L“sdmc:/中文.mp4”;
UrlTmpsize= wstrlen((const wchar_t*)szTempPath);
UrlTmppath = (MChar*)MMemAlloc(MNull, sizeof(MChar) * (2*UrlTmpsize + 1));
wcstombs(UrlTmppath,(const wchar_t*)szTempPath, (2*UrlTmpsize + 1)*sizeof(MChar));
宽字符转多字节的结果 UrlTmppath = “sdmc:/”
转换出问题,中文以及后面的字符没有了,请问大家这是什么原因?急!应该不是内存申请大小有问题
[解决办法]
wchar_t* szTempPath = L“sdmc:/中文.mp4”;
UrlTmpsize= wstrlen((const wchar_t*)szTempPath);
UrlTmppath = (MChar*)MMemAlloc(MNull, sizeof(MChar) * (4*UrlTmpsize + 1));
wcstombs(UrlTmppath,(const wchar_t*)szTempPath, (2*UrlTmpsize + 1)*sizeof(MChar));
你怀疑申请内存不够,那么你就申请足够大的内存,看看是不是发生在内存不够用这个问题上不就行了,如果你申请了一个足够大的内存还有问题那就说明不是发生在malloc中,而是其他地方,要学会自己调试,聪明地调试和找bug
[解决办法]
仅供参考,尽管是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