1.字符串格式化
NSString *p =@"an apple";
NSLog(@"whatis this? it is %@", p);
Objective-C中的字符串格式化输出
在使用诸如NSLog, [NSString stringWithFormat:]之类的函数时,都是基于c/c++风格的字符串格式化工作的.本来c/c++就没怎么用过,到iphone开发开发
转自http://blog.kungfusoft.com/programming/iphone/topic-281.html
在使用诸如NSLog, [NSString stringWithFormat:]之类的函数时,都是基于c/c++风格的字符串格式化工作的.
本来c/c++就没怎么用过,到iphone开发开发时掺合上NS系的对象,格式化输出更是一头的乱.
看了一下Programming Guide for Cocoa的文档,还是有比较详尽的说明的,整理出来备查.
格式定义
The formatspecifiers supported by the NSString formatting methods and CFString formattingfunctions follow the IEEE printf specification; the specifiers are summarizedin Table 1. Note that you can also use the “n$” positional specifiers such as%1$@ %2$s. For more details, see the IEEE printf specification. You can alsouse these format specifiers with the NSLog function.
Table 1 Formatspecifiers supported by the NSString formatting methods and CFString formattingfunctions 定义 说明
%@ Objective-C object, printed as the stringreturned by descriptionWithLocale: if available, or description otherwise. Alsoworks with CFTypeRef objects, returning the result of the CFCopyDescriptionfunction.
%% ‘%’ character
%d, %D, %i Signed 32-bit integer (int)
%u, %U Unsigned 32-bit integer (unsigned int)
%hi Signed 16-bit integer (short)
%hu Unsigned 16-bit integer (unsigned short)
%qi Signed 64-bit integer (long long)
%qu Unsigned 64-bit integer (unsigned longlong)
%x Unsigned 32-bit integer (unsigned int),printed in hexadecimal using the digits 0–9 and lowercase a–f
%X Unsigned 32-bit integer (unsigned int),printed in hexadecimal using the digits 0–9 and uppercase A–F
%qx Unsigned 64-bit integer (unsigned longlong), printed in hexadecimal using the digits 0–9 and lowercase a–f
%qX Unsigned 64-bit integer (unsigned longlong), printed in hexadecimal using the digits 0–9 and uppercase A–F
%o, %O Unsigned 32-bit integer (unsigned int),printed in octal
%f 64-bit floating-point number (double)
%e 64-bit floating-point number (double),printed in scientific notation using a lowercase e to introduce the exponent
%E 64-bit floating-point number (double),printed in scientific notation using an uppercase E to introduce the exponent
%g 64-bit floating-point number (double),printed in the style of %e if the exponent is less than –4 or greater than orequal to the precision, in the style of %f otherwise
%G 64-bit floating-point number (double),printed in the style of %E if the exponent is less than –4 or greater than orequal to the precision, in the style of %f otherwise
%c 8-bit unsigned character (unsigned char),printed by NSLog() as an ASCII character, or, if not an ASCII character, in theoctal format \\ddd or the Unicode hexadecimal format \\udddd, where d is adigit
%C 16-bit Unicode character (unichar),printed by NSLog() as an ASCII character, or, if not an ASCII character, in theoctal format \\ddd or the Unicode hexadecimal format \\udddd, where d is adigit
%s Null-terminated array of 8-bit unsignedcharacters. %s interprets its input in the system encoding rather than, forexample, UTF-8.
%S Null-terminated array of 16-bit Unicodecharacters
%p Void pointer (void *), printed inhexadecimal with the digits 0–9 and lowercase a–f, with a leading 0x
%L Length modifier specifying that afollowing a, A, e, E, f, F, g, or G conversion specifier applies to a longdouble argument
%a 64-bit floating-point number (double),printed in scientific notation with a leading 0x and one hexadecimal digitbefore the decimal point using a lowercase p to introduce the exponent
%A 64-bit floating-point number (double),printed in scientific notation with a leading 0X and one hexadecimal digitbefore the decimal point using a uppercase P to introduce the exponent
%F 64-bit floating-point number (double),printed in decimal notation
%z Length modifier specifying that afollowing d, i, o, u, x, or X conversion specifier applies to a size_t or thecorresponding signed integer type argument
%t Length modifier specifying that a following d,i, o, u, x, or X conversion specifier applies to a ptrdiff_t or thecorresponding unsigned integer type argument
%j Length modifier specifying that a following d,i, o, u, x, or X conversion specifier applies to a intmax_t or uintmax_targument
平台依赖
Mac OS X usesseveral data types—NSInteger, NSUInteger,CGFloat, and CFIndex—to provide aconsistent means of representing values in 32- and 64-bit environments. In a32-bit environment, NSInteger and NSUInteger are defined as int and unsignedint, respectively. In 64-bit environments, NSInteger and NSUInteger are definedas long and unsigned long, respectively. To avoid the need to use differentprintf-style type specifiers depending on the platform, you can use thespecifiers shown in Table 2. Note that in some cases you may have to cast thevalue.