background image

%g 64 位 double,在指数小于-4 或大于 4 时同%e,否则同%f
%G 同上,%E
%c   表示 8 位 unsigned char,作为 ASCII 码,或者如果它不是一个 ASCII 码,使用\\ddd 或
Unicode16 进制格式\\udddd
%C  16 位的 unichar, 其他同上。
%s   8 位  没看懂,好像是表示编码,官方建议不要用,而是显式指定编码。
%S  16 位  同上
%p   表示空指针 (void *),以 16 进制表示,以 0x 开头,10-15 用 a-f 表示。
%a  64 位 double,科学计数法表示,以 0x 开头和。。。
%A  同上,以 0X 开头
%F  64 位 double,以科学计数法表示。

长度修饰符
h       修饰遵循 d,o,u,x,或 X
hh     修饰遵循 d o u x 的 signed char 或 unsigned char
l         修饰 long 或 unsigned long
ll,q     long long,或 unsigned long long
L     long double
z          
t
j

基于平台的

NSInteger、NSUInteger、CGFloat 和 CFIndex 在 32 位和 64 位的环境中来提供一个

一致的方式代表值。在

32 位环境中,NSInteger 和 NSUInteger 表示 int 和 unsigned int,相对

地,在

64 位环境中,NSInteger 和 NSUInteger 表示 long 和 unsigned long。为了避免在不同的

平台使用不同的格式符,你可以使用下面的修饰符

类型

               格式符修饰符           Considerations

NSInteger       %ld 或%lx                 转换值到 long
NSUInteger      %lu 或%lx                  转换到 unsigned long
CGFloat         %f 或%g                  
CFIndex         %ld 或%lx                 同于 NSInteger
pointer           %p 或%zx

例子:
NSInteger i = 42;
printf("%ld\n", (long)i);

CGFloat imageWidth;
double tmp;
sscanf (str, "%lf", &tmp);
imageWidth = tmp;