The format specifiers supported by the NSString
formatting methods and CFString formatting functions follow the IEEE printf specification; the specifiers are summarized in 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 also use these format specifiers with the NSLog
function.
Specifier | Description |
---|---|
| Objective-C object, printed as the string returned by |
| |
| Signed 32-bit integer ( |
| Unsigned 32-bit integer ( |
| Signed 16-bit integer ( |
| Unsigned 16-bit integer ( |
| Signed 64-bit integer ( |
| Unsigned 64-bit integer ( |
| Unsigned 32-bit integer ( |
| Unsigned 32-bit integer ( |
| Unsigned 64-bit integer ( |
| Unsigned 64-bit integer ( |
| Unsigned 32-bit integer ( |
| 64-bit floating-point number ( |
| 64-bit floating-point number ( |
| 64-bit floating-point number ( |
| 64-bit floating-point number ( |
| 64-bit floating-point number ( |
| 8-bit unsigned character ( |
| 16-bit Unicode character ( |
| Null-terminated array of 8-bit unsigned characters. |
| Null-terminated array of 16-bit Unicode characters |
| Void pointer ( |
| Length modifier specifying that a following |
| 64-bit floating-point number ( |
| 64-bit floating-point number ( |
| 64-bit floating-point number ( |
| Length modifier specifying that a following |
| Length modifier specifying that a following |
| Length modifier specifying that a following |
Platform Dependencies
Mac OS X uses several data types—NSInteger
, NSUInteger
,CGFloat
, and CFIndex
—to provide a consistent means of representing values in 32- and 64-bit environments. In a 32-bit environment, NSInteger
andNSUInteger
are defined as int
and unsigned int
, respectively. In 64-bit environments, NSInteger
andNSUInteger
are defined as long
and unsigned long
, respectively. To avoid the need to use different printf-style type specifiers depending on the platform, you can use the specifiers shown in Table 2. Note that in some cases you may have to cast the value.
Type | Format specifier | Considerations |
---|---|---|
| | Cast the value to |
| | Cast the value to |
| | |
| | The same as |
pointer | | |
| | |
| | |
The following example illustrates the use of %ld
to format an NSInteger
and the use of a cast.
NSInteger i = 42; |
printf("%ld\n", (long)i); |
In addition to the considerations mentioned in Table 2, there is one extra case with scanning: you must distinguish the types for float
and double
. You should use %f
for float, %lf
for double. If you need to use scanf
(or a variant thereof) with CGFloat
, switch to double
instead, and copy the double
to CGFloat
.
CGFloat imageWidth; |
double tmp; |
sscanf (str, "%lf", &tmp); |
imageWidth = tmp; |
It is important to remember that %lf
does not represent CGFloat
correctly on either 32- or 64-bit platforms. This is unlike %ld
, which works for long
in all cases.