btowc
来自cppreference.com
| 在标头 <wchar.h> 定义
|
||
| |
(C95 起) | |
将单字节字符 c(转译成 unsigned char)加宽为其宽字符等价物。
大多数多字节字符编码都用单字节码来表示来自 ASCII 字符集的字符。此函数可以用于把这些字符转换为 wchar_t。
参数
| c | - | 要加宽的单字节字符 |
返回值
若 c 为 EOF 则返回 WEOF。
若 (unsigned char)c 在初始迁移状态为合法单字节字符,则返回 c 的宽字符表示,否则返回 WEOF。
示例
运行此代码
#include <stdio.h>
#include <wchar.h>
#include <locale.h>
#include <assert.h>
void try_widen(unsigned char c)
{
wint_t w = btowc(c);
if(w != WEOF)
printf("单字节字符 %#x 加宽为 %#x\n", c, w);
else
printf("单字节字符 %#x 加宽失败\n", c);
}
int main(void)
{
char *loc = setlocale(LC_ALL, "lt_LT.iso88594");
assert(loc);
printf("Lithuanian ISO-8859-4 locale 中:\n");
try_widen('A');
try_widen('\xdf'); // ISO-8859-4 的德文字母 ß(U+00df)
try_widen('\xf9'); // ISO-8859-4 的立陶宛文字母 ų(U+0173)
setlocale(LC_ALL, "lt_LT.utf8");
printf("Lithuanian UTF-8 locale 中:\n");
try_widen('A');
try_widen('\xdf');
try_widen('\xf9');
}
可能的输出:
Lithuanian ISO-8859-4 locale 中:
单字节字符 0x41 加宽为 0x41
单字节字符 0xdf 加宽为 0xdf
单字节字符 0xf9 加宽为 0x173
Lithuanian UTF-8 locale 中:
单字节字符 0x41 加宽为 0x41
单字节字符 0xdf 加宽失败
单字节字符 0xf9 加宽失败