NSLog/NSString 输出格式 Format String Issue
2011-09-23 22:34
295 查看
是不是Xcode总是报告NSLog格式输出不对?
Yes,warning: Format String Issue: Conversion specifies type 'int' but the argument has type 'long'
String Format Specifiers
This article summarizes the format specifiers supported by string formatting methods and functions.Format Specifiers
The format specifiers supported by theNSStringformatting 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
NSLogfunction.
Specifier | Description |
---|---|
%@ | Objective-C object, printed as the string returned by descriptionWithLocale:if available, or descriptionotherwise. Also works with CFTypeRefobjects, 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 long long) |
%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 long long), printed in hexadecimal using the digits 0–9 and lowercase a–f |
%qX | Unsigned 64-bit integer (unsigned long long), 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 %eif the exponent is less than –4 or greater than or equal to the precision, in the style of %fotherwise |
%G | 64-bit floating-point number (double), printed in the style of %Eif the exponent is less than –4 or greater than or equal to the precision, in the style of %fotherwise |
%c | 8-bit unsigned character (unsigned char), printed by NSLog()as an ASCII character, or, if not an ASCII character, in the octal format \\dddor the Unicode hexadecimal format \\udddd, where dis 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 \\dddor the Unicode hexadecimal format \\udddd, where dis a digit |
%s | Null-terminated array of 8-bit unsigned characters. %sinterprets its input in the system encoding rather than, for example, UTF-8. |
%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 |
%L | Length modifier specifying that a following a, A, e, E, f, F, g, or Gconversion specifier applies to a long doubleargument |
%a | 64-bit floating-point number (double), printed in scientific notation with a leading 0xand one hexadecimal digit before the decimal point using a lowercase pto introduce the exponent |
%A | 64-bit floating-point number (double), printed in scientific notation with a leading 0Xand one hexadecimal digit before the decimal point using a uppercase Pto introduce the exponent |
%F | 64-bit floating-point number (double), printed in decimal notation |
%z | Length modifier specifying that a following d, i, o, u, x, or Xconversion specifier applies to a size_tor the corresponding signed integer type argument |
%t | Length modifier specifying that a following d, i, o, u, x, or Xconversion specifier applies to a ptrdiff_tor the corresponding unsigned integer type argument |
%j | Length modifier specifying that a following d, i, o, u, x, or Xconversion specifier applies to a intmax_tor uintmax_targument |
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,
NSIntegerand
NSUIntegerare defined as
intand
unsigned int, respectively. In 64-bit environments,
NSIntegerand
NSUIntegerare defined as
longand
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 |
---|---|---|
NSInteger | %ldor %lx | Cast the value to long |
NSUInteger | %luor %lx | Cast the value to unsigned long |
CGFloat | %for %g | %fworks for floats and doubles when formatting; but see below warning when scanning |
CFIndex | %ldor %lx | The same as NSInteger |
pointer | %p | %padds 0xto the beginning of the output. If you don't want that, use %lxand cast to long. |
long long | %lldor %llx | long longis 64-bit on both 32- and 64-bit platforms |
unsigned long long | %lluor %llx | unsigned long longis 64-bit on both 32- and 64-bit platforms |
%ldto format an
NSIntegerand the use of a cast.
NSInteger i = 42; |
printf("%ld\n", (long)i); |
floatand
double. You should use
%ffor float,
%lffor double. If you need to use
scanf(or a variant thereof) with
CGFloat, switch to
doubleinstead, and copy the
doubleto
CGFloat.
CGFloat imageWidth; |
double tmp; |
sscanf (str, "%lf", &tmp); |
imageWidth = tmp; |
%lfdoes not represent
CGFloatcorrectly on either 32- or 64-bit platforms. This is unlike
%ld, which works for
longin all cases.
%@ Object
%d, %i signed int
%u unsigned int
%f float/double
%x, %X hexadecimal int
%o octal int
%zu size_t
%p pointer
%e float/double (in scientific notation)
%g float/double (as %f or %e, depending on value)
%s C string (bytes)
%S C string (unichar)
%.*s Pascal string (requires two arguments, pass pstr[0] as the first, pstr+1 as the second)
%c character
%C unichar
%lld long long
%llu unsigned long long
%Lf long double
相关文章推荐
- [转]用DateTime.ToString(string format)输出不同格式的日期(WindowsFrom)
- [转]用DateTime.ToString(string format)输出不同格式的日期
- 用DateTime.ToString(string format)输出不同格式的日期
- 用DateTime.ToString(string format)输出不同格式的日期
- 用DateTime.ToString(string format)输出不同格式的日期
- 用DateTime.ToString(string format)输出不同格式的日期
- DateTime.ToString(string format)输出不同格式的日期
- 用DateTime.ToString(string format)输出不同格式的日期
- 用DateTime.ToString(string format)输出不同格式的日期
- 用DateTime.ToString(string format)输出不同格式的日期
- 转:用DateTime.ToString(string format)输出不同格式的日期
- 用DateTime.ToString(string format)输出不同格式的日期
- 用DateTime.ToString(string format)输出不同格式的日期
- String.Format(字符串输出格式)
- 用DateTime.ToString(string format)输出不同格式的日期
- ToString(string format)输出格式简述
- 用DateTime.ToString(string format)输出不同格式
- string.Format 日期常用格式输出
- vb 表达式大全,函数,用DateTime.ToString(string format)输出不同格式的日期
- 用DateTime.ToString(string format)输出不同格式的日期