WideCharToMultiByte功能将宽字符字符串映射到新的字符串。新的字符串不一定来自多字节字符集。
int WideCharToMultiByte(
UINT 【CodePage】, | //代码页 |
DWORD 【dwFlags中】, | //性能和映射标志 |
LPCWSTR 【lpWideCharStr】, | //宽字符串的地址 |
INT 【cchWideChar】, | //字符串中的字符数 |
LPSTR 【lpMultiByteStr】, | //新字符串的缓冲区地址 |
INT 【cchMultiByte】, | //缓冲区大小 |
LPCSTR 【lpDefaultChar】, | //不可映射字符的默认地址 |
LPBOOL 【lpUsedDefaultChar】 | //默认字符集的地址。用过的 |
); |
参数
【CodePage】
指定用于执行转换的代码页。该参数可以被赋予在系统中安装或可用的任何代码页的值。以下值可用于指定系统默认代码页之一:
值 | 含义 |
CP_ACP | ANSI代码页 |
CP_MACCP | Macintosh代码页 |
CP_OEMCP | OEM代码页 |
【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】 | 结果 |
NULL | NULL | 没有默认检查。这是使用此函数的最有效,最快捷的方法。 |
non-NULL | NULL | 使用指定的默认字符,但不设置【lpUsedDefaultChar】. |
NULL | non-NULL | 使用系统默认字符,并在必要时设置【lpUsedDefaultChar】. |
non-NULL | non-NULL | 使用指定的默认字符,并在必要时设置【lpUsedDefaultChar】. |
也可以看看