宽字符概念
宽字符又称多字节字符又称
Unicode
,在我们在日常写代码的过程中,大部分接触的是ASCII 字符,那么对于字符变量,我们常用的数据类型是
char
,但是对于中文字符,用
char
变量就不行了,那么就需要使用宽字符了。
也就是说一般的字符是一个字节组成的,如 0x0a,0x38,
那么对于普通字符,
0x00
就可以用来表示字符串结束符,而宽字符通常是由两个字节组成的,例如:0x0061(97)
依然是用来表示字符 a,
不过它是由两个字节组成,这样一个宽字符最多可表示
65535
个字符,包含了世界上大多数的字样表示。它的类型应该声明为 wchar_t
在
VC++6.0
之前一直以
unsigned short
代替。
在定义宽字符或宽字符串时使用前缀 L 标识即可,例如:
wchar_t ch = L'你';
wchar_t str[128] = L"你好";
使用宽字符变量定义中文变量之前,先要使用 setlocale
函数来设置地域,他的作用相当于在控制台窗口设置好当前代码页的编码方式。
设置或读取地域化信息 api
头文件:
#include <locale.h>
头文件中的
lconv
结构体:
typedef struct {
char *decimal_point; //用于非货币值的小数点字符
char *thousands_sep; //用于非货币值的千位分隔符
char *grouping; //一个表示非货币量中每组数字大小的字符串。
char *int_curr_symbol; //国际货币符号使用的字符串。
char *currency_symbol; //用于货币的本地符号
char *mon_decimal_point; //用于货币值的小数点字符。
char *mon_thousands_sep; //用于货币值的千位分隔符
char *mon_grouping; //用于货币值的千位分隔符
char *positive_sign; //用于正货币值的字符
char *negative_sign; //用于负货币值的字符
char int_frac_digits; //国际货币值中小数点后要显示的位数
char frac_digits; //货币值中小数点后要显示的位数
char p_cs_precedes; //如果等于 1,则 currency_symbol 出现在正货币
值之前。如果等于 0,则 currency_symbol 出现在正货币值之后。
char p_sep_by_space; //如果等于 1,则 currency_symbol 和正货币值
之间使用空格分隔。如果等于 0,则 currency_symbol 和正货币值之间不使用
空格分隔。
char n_cs_precedes; //如果等于 1,则 currency_symbol 出现在负货币
值之前。如果等于 0,则 currency_symbol 出现在负货币值之后。
char n_sep_by_space; //如果等于 1,则 currency_symbol 和负货币值
之间使用空格分隔。如果等于 0,则 currency_symbol 和负货币值之间不使用
空格分隔。
char p_sign_posn; //表示正货币值中正号的位置。
char n_sign_posn; //表示负货币值中负号的位置。
} lconv
setlocale 函数
函数原型:
char *setlocale(int category, const char *locale)
描述:
设置或读取地域化信息。
参数
:
category:
这是一个已命名的常量,指定了受区域设置影响的函数类别,类别宏如下


宽字符用于处理多字节字符,如中文,在C++中使用wchar_t类型。通常一个宽字符由两个字节组成,能表示65535个字符。通过前缀L定义宽字符和宽字符串。setlocale函数用于设置地域信息,影响字符显示。localeconv提供货币相关地域信息。宽字符相关API包括wcslen、wprintf、wscanf、wcscmp等,用于宽字符串的处理和输入输出。
最低0.47元/天 解锁文章
715





