%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;