C 标准库系列之locale.h
locale.h 区域设置相关,主要针对时间日期、货币格式、字符控制、数字格式等以满足某区域的设置需要。
locale设置类别主要包括以下几个宏定义的类别:
LC_ALL:设置所有的类别;
LC_COLLATE:设置控制整理顺序;
LC_CTYPE:设置字符分类;
LC_MONETARY:设置货币的格式;
LC_NUMERIC:设置数字格式,如小数点后位数;
LC_TIME:设置时间日期格式;
某些C标准库实现还提供了其他类型的设置类别扩展,如glibc实现约有12种类型;不过除以上类别外的其他类别在移植性方面可能会有影响。
其他的如:
LC_MESSAGES:信息提示、错误信息、状态信息、标题、标签、按钮和菜单等信息类别;
LC_PAPER:纸张尺寸大小类别;
LC_NAME:名称书写类别;
LC_ADDRESS:地址书写类别;
LC_TELEPHONE:电话号码类别;
LC_MEASUREMENT:度量测量方式类别;
LC_IDENTIFICATION:locale自身信息类别;
此外在设置类别是存在一定的优先级别,即一般满足LC_ALL > LC_* >LANG;也即是前者会覆盖后者的设置,各个类别会影响相应类别的相关函数行为,如mbstowcs、strftime等。
两个比较重要的函数,setlocale、localeconv分别为设置某类别的区域本地化信息并返回相应设置的地域化信息、获取当前设置的区域格式。
char *setlocale( int category, const char *locale ):category即为类别,locale为设置区域信息,如"CHS","C","",”US“,等;一般可根据需要设置区域信息,不过若需要
还原时一般针对某种类别或所有的设置使用“C”即可使用默认的C编译环境,“”则使用本地区域的环境。
struct lconv * localeconv(void):返回值为一个结构,各主要成员参数分别为:
decimal_point:小数点;
thousands_sep:千位数分隔符;
grouping:分组,如3时,则为1 000 000 000的格式分组;
int_curr_symbol:当前货币符号前置标识,如CNY,USD等;
currency_symbol:当前货币符号标识,如¥、$等;
mon_decimal_point:货币小数点;
mon_thousands_sep:货币千位数分隔符;
mon_grouping:货币分组;
positive_sign:正值符号标识;
negative_sign:负值符号标识;
int_frac_digits:国际货币小数数字;
frac_digits:货币小数数字;
p_cs_precedes、p_sep_by_space、n_cs_precedes、n_sep_by_space、p_sign_posn、n_sign_posn:则为0或者1的值,主要用以表明符号所处的位置。
glibc以及微软的lconv结构还有其他的成员参数,同样的这些成员也可能会有移植性问题;
除了以上两个函数外glibc还提供了newlocale、duplocale、freelocale、uselocale区域设置的接口函数;微软的也提供了_create_locale、_free_locale、_get_current_locale、
_configthreadlocale区域设置接口,所有的以上这些接口可能都会影响可移植性。
C 标准库系列之locale.h的更多相关文章
- C 标准库系列之errno.h
errno.h 提供了一个整数全局变量errno,当系统调用或者库函数的错误事件发生时可能会修改该值,指明错误的原因,该值可在任何需要的地方被修改:一般情况不为0的值表示出现了异常或者错误. errn ...
- C 标准库系列之assert.h
先简单介绍一下<assert.h>头文件,该头文件的目的便是提供一个宏assert的定义,即可以在程序必要的地方使用其进行断言处理:断言在程序中的作用是当在调试模式下时,若程序给出的前提条 ...
- C 标准库系列之limits.h
limits.h 类似于float.h,其定义了一些列类型的值的范围.限制值,也就是说该类型的值不可以大于该上界或者小于该类型值的下界: glibc中宏定义了一下的值: # define MB_LEN ...
- C 标准库系列之float.h
float.h 内部主要包含了一系列的浮点数宏.指明可移植程序必要的常量:浮点数格式一般为Spxbe;其中S表示+-:p表示底数.b表示基数如2.8.10.16等进制,e为指数标识E或e: 在一般情况 ...
- C 标准库系列之ctype.h
ctype.h 主要提供了一些函数用以测试字符或字符处理的功能函数:包括字符判断检测.字符转换: 目前ASCII字符可分为以下一些类型,如:大写.小写.字母.数字.十六进制.空白字符.可打印字符.控制 ...
- C 标准库系列之概述
基本上很多编程语言都会提供针对语言本身的一系列的标准库或者包,当然C语言同样也有提供标准库,C语言的标准库是一系列的头文件的集合:如assert.h.ctype.h.errno.h.float.h.l ...
- 《C标准库》——之<ctype.h>
在没读<ctype.h>的源码之前,我一直以为我们平时用的isalnum.isdigit.isalpha等这些函数,是靠判断写出来的. 比如: int isdigit(int c){ re ...
- 《C标准库》——之<stddef.h>
<stddef.h>,顾名思义,就是标准定义.C语言里这个标准库里定义了一些类型,和宏定义. <stddef.h>的内容: 类型: ptrdiff_t : 是两个指针相减的结果 ...
- 《C标准库》—之<assert.h>实现
首先,贴出标准库中<assert.h>的实现源码: #undef assert #ifdef NDEBUG #define assert(test)((void)0) #else void ...
随机推荐
- mysql ,服务器耗时测试
测试一 字段:ID,test,number 电脑配置:8g内存 同时写入超过5w条,就会卡死 错误提示 Fatal error: Allowed memory size of bytes exhaus ...
- Linux及VMWare的网卡选择设计及理解
vmware网络的连接方式分为三种:桥接,NAT,Host-only.(当我们安装完VMware WorkStation的时候,它会帮我们安装两块虚拟网卡,分别是vmnet1,和vmnet8.vmne ...
- Centos6.5下docker 环境搭建
一.运行docker Linux内核版本需要在3.8以上,针对centos6.5 内核为2.6的系统需要先升级内核.不然会特别卡,退出容器. 在yum的ELRepo源中,有mainline(3.13. ...
- php内部函数
strpos函数 /** haystack:被比较字串首地址(指向被比较字符串) needle:源字串首地址(指向源字符串) needle_len:源字符串长度 end:指向最后一个字符地址的下一个内 ...
- Bubble Cup 8 finals E. Spectator Riots (575E)
题意: 一个长宽是100000单位的球场上有很多暴动的观众,每个观众都有一个速度v, 在一秒内,观众会等概率地移动到与原位置的曼哈顿距离<=v的地方(不会移动到界外). 你需要选取三个位置,这三 ...
- oracle锁等级以及解锁
以下是两遍关于锁的介绍的文章,第一篇介绍锁等级以及常用操作,第二篇主要介绍了oracle中两个用以查询数据库任意对象的两个视图 一: http://www.cnblogs.com/lguyss/arc ...
- iOS多线程-GCD之常用函数
延迟执行任务函数dispatch_after(.....) -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEve ...
- 类别(Category)与扩展(Extensions)
一.类别(Category) 类别(Category)是一种可以为现有的类(包括类簇:NSString...,甚至源码无法获得的类)添加新方法的方式无需从现有的类继承子类.类别添加的新方法可以被子类继 ...
- 双向数据绑定(angular,vue)
最近github上插件项目更新了关于双向数据绑定的实现方式,关于angular和vue. angular众所周知是使用的脏检查($dirty).一开始大家会认为angular开启了类似setInter ...
- vue DatePicker vue2.0的日期插件
一个用vue2.0写的日期控件,可以支持简单的年月日选择.地址:https://github.com/Stevenzwzhai/vue-datepicker. 首先是关于日期对象的使用,基本就是日期的 ...