WideCharToMultiByte

【勇芳软件工作室】汉化HomePreviousNext

WideCharToMultiByte功能将宽字符字符串映射到新的字符串。新的字符串不一定来自多字节字符集。

int WideCharToMultiByte(

UINT 【CodePage】,//代码页
DWORD 【dwFlags中】,//性能和映射标志
LPCWSTR 【lpWideCharStr】,//宽字符串的地址
INT 【cchWideChar】,//字符串中的字符数
LPSTR 【lpMultiByteStr】,//新字符串的缓冲区地址
INT 【cchMultiByte】,//缓冲区大小
LPCSTR 【lpDefaultChar】,//不可映射字符的默认地址
LPBOOL 【lpUsedDefaultChar】//默认字符集的地址。用过的
); 

参数

【CodePage】

指定用于执行转换的代码页。该参数可以被赋予在系统中安装或可用的任何代码页的值。以下值可用于指定系统默认代码页之一:

含义
CP_ACPANSI代码页
CP_MACCPMacintosh代码页
CP_OEMCPOEM代码页

【dwFlags中】

一组位标志,指定未映射字符的处理。当没有这些标志被设置时,该函数执行得更快。定义了以下标志常量:

含义
WC_COMPOSITECHECK将复合字符转换为预先配置的字符。
WC_DISCARDNS在转换过程中放弃非空格字符。
WC_SEPCHARS在转换期间生成单独的字符。这是默认的转换行为。
WC_DEFAULTCHAR在转换期间使用默认字符替换异常。

当指定WC_COMPOSITECHECK时,函数将复合字符转换为预先配置的字符。复合字符由基本字符和非空格字符组成,每个字符具有不同的字符值。预先配置的字符具有单个字符值用于基础/非空间字符组合。在字符【】中,【e】是基本字符,重音符号是非空格字符。

当应用程序指定WC_COMPOSITECHECK时,它可以使用此列表中的最后3个标志(WC_DISCARDNS,WC_SEPCHARS和WC_DEFAULTCHAR)自定义转换为预先配置的字符。当宽字符串中的基本/非空格字符组合没有预先映射时,这些标志确定函数的行为。如果设置了WC_COMPOSITECHECK标志,则最后3个标志可以使用只要.

该函数的默认行为是为未映射的复合字符生成单独的字符(WC_SEPCHARS)。

【lpWideCharStr】

指向要转换的宽字符字符串。

【cchWideChar】

指定【lpWideCharStr】参数指向的字符串中的字符数。如果此值为-1,则假定字符串为空终止,并自动计算长度。

【lpMultiByteStr】

指向缓冲区以接收翻译的字符串。

【cchMultiByte】

指定由【lpMultiByteStr】参数指向的缓冲区的字符大小。如果该值为零,则该函数返回缓冲区所需的字节数。(在这种情况下,不使用【lpMultiByteStr】缓冲区。)

【lpDefaultChar】

指向使用的字符,如果宽字符不能在指定的代码页中表示。如果此参数为NULL,则使用系统默认值。当【lpDefaultChar】【lpUsedDefaultChar】都为NULL时,该函数更快。

【lpUsedDefaultChar】

指向指示是否使用默认字符的标志。如果源字符串中的一个或多个宽字符不能在指定的代码页中被表示,则该标志设置为TRUE。否则,该标志设置为FALSE。此参数可能为NULL。当【lpDefaultChar】【lpUsedDefaultChar】都为NULL时,该函数更快。

返回值

如果函数成功,并且【cchMultiByte】非零,则返回值是写入【lpMultiByteStr】指向的缓冲区的字节数。

如果函数成功,并且【cchMultiByte】为零,则返回值是可以接收转换的字符串的缓冲区所需的大小(以字节为单位)。

如果函数失败,返回值为零。要获取扩展错误信息,请调用GetLastError.GetLastError可能会返回以下错误代码之一:

ERROR_INSUFFICIENT_BUFFER
ERROR_INVALID_FLAGS
ERROR_INVALID_PARAMETER

备注

【lpMultiByteStr】【lpWideCharStr】指针不能相同。如果它们相同,则该函数失败,并且GetLastError返回ERROR_INVALID_PARAMETER。

应用程序可以使用【lpDefaultChar】参数来更改用于转换的默认字符。

如前所述,当【lpDefaultChar】【lpUsedDefaultChar】都为NULL时,WideCharToMultiByte功能最有效。下表显示【lpDefaultChar】【lpUsedDefaultChar】的四种组合的WideCharToMultiByte的行为:

【lpDefaultChar】【lpUsedDefaultChar】结果
NULLNULL没有默认检查。这是使用此函数的最有效,最快捷的方法。
non-NULLNULL使用指定的默认字符,但不设置【lpUsedDefaultChar】.
NULLnon-NULL使用系统默认字符,并在必要时设置【lpUsedDefaultChar】.
non-NULLnon-NULL使用指定的默认字符,并在必要时设置【lpUsedDefaultChar】.

也可以看看

MultiByteToWideChar