格式化字串參數說明(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. |