格式化字串參數說明(string format)

格式化字串參數說明(string format)

NSString *string = [[NSString alloc] initWithFormat:(@"float:%f,int:%i"),3.3366f,1];

NSLog(@"float:%f,int:%i",3.3366f,1);


格式化字串是利用格式字符(format specifier)來決定格式種類,這類的格式字符會由%+若干格式字元來組成(ex:%f代表的是浮點、%i代表的是整數,將傳入的值根據格式轉換),它尊照IEEE printf的規格並支援Objective-C的NSString與CFString,你可以使用下面表格1的格式字符資訊使用,表格中對於格式字符有簡略說明,更多的細節請查照IEEE printf,當然它也可以使用在基於String輸出的NSLog這個函數。

Table 1

Specifier Description
%@ Objective-C object, printed as the string returned by descriptionWithLocale: if available, or description otherwise. Also works withCFTypeRef objects, returning the result of the CFCopyDescription function.
%% ‘%’ character.
%d, %D Signed 32-bit integer (int).
%u, %U Unsigned 32-bit integer (unsigned int).
%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.
%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 or equal 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 or equal 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 the octal format \ddd or the Unicode hexadecimal format \udddd, where d is a digit.
%C 16-bit Unicode character (unichar), printed by NSLog() as an ASCII character, or, if not an ASCII character, in the octal format \ddd or the Unicode hexadecimal format \udddd, where d is a digit.
%s Null-terminated array of 8-bit unsigned characters. Because the %s specifier causes the characters to be interpreted in the system default encoding, the results can be variable, especially with right-to-left languages. For example, with RTL, %s inserts direction markers when the characters are not strongly directional. For this reason, it’s best to avoid %s and specify encodings explicitly.
%S Null-terminated array of 16-bit Unicode characters.
%p Void pointer (void *), printed in hexadecimal with the digits 0–9 and lowercase a–f, with a leading 0x.
%a 64-bit floating-point number (double), printed in scientific notation with a leading 0x and one hexadecimal digit before 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 digit before the decimal point using a uppercase P to introduce the exponent.
%F 64-bit floating-point number (double), printed in decimal notation.

變數長度

Table2

Length modifier Description
h Length modifier specifying that a following d, o, u, x, or X conversion specifier applies to a short or unsigned short argument.
hh Length modifier specifying that a following d, o, u, x, or X conversion specifier applies to a signed char or unsigned char argument.
l Length modifier specifying that a following d, o, u, x, or X conversion specifier applies to a long or unsigned long argument.
ll, q Length modifiers specifying that a following d, o, u, x, or X conversion specifier applies to a long long or unsigned long longargument.
L Length modifier specifying that a following a, A, e, E, f, F, g, or G conversion specifier applies to a long double argument.
z Length modifier specifying that a following d, o, u, x, or X conversion specifier applies to a size_t or the corresponding signed integer type argument.
t Length modifier specifying that a following d, o, u, x, or X conversion specifier applies to a ptrdiff_t or the corresponding unsigned integer type argument.
j Length modifier specifying that a following d, o, u, x, or X conversion specifier applies to a intmax_t or uintmax_t argument.

Platform 相關

OS X使用的這幾個資料類型像:NSInteger、NSUInteger、CGFloat、CFIndex都具有32bit與64bit環境上面所實作的也不同,像是NSInteger在64bit中是被宣告成long型態,然後32bit是被宣告成int,因為這樣提供了較特別的格式字符,如下表3

Table3

Type Format specifier Considerations
NSInteger %ld or %lx Cast the value to long.
NSUInteger %lu or %lx Cast the value to unsigned long.
CGFloat %f or %g %f works for floats and doubles when formatting; but note the technique described below for scanning.
CFIndex %ld or %lx The same as NSInteger.
pointer %p or %zx %p adds 0x to the beginning of the output. If you don’t want that, use %zx and no typecast.

參考資訊

String Programming Guide