
在使用诸如NSLog,[Nsstring stringWithFormat:]之类的函数时,都是基于c/c++风格的字符串格式化工作的.
本来c/c++就没怎么用过,到iphone开发开发时掺合上NS系的对象,格式化输出更是一头的乱.
看了一下Programming GuIDe for Cocoa的文档,还是有比较详尽的说明的,整理出来备查.
格式定义
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.
| 定义 | 说明 |
| %@ | Objective-C object,printed as the string returned by descriptionWithLocale: if available,or description otherwise. Also works with CFTypeRef objects,returning the result of the CFcopyDescription function. |
| %% | ‘%’ 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 %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),where d is a digit |
| %s | Null-terminated array of 8-bit unsigned characters. %s interprets 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 G conversion specifIEr applIEs to a long double argument |
| %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 |
| %z | Length modifIEr specifying that a following d,i,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,or X conversion specifIEr applIEs to a ptrdiff_t or the corresponding unsigned integer type argument |
| %j | Length modifIEr specifying that a following d,or X conversion specifIEr applIEs to a intmax_t or uintmax_t argument |
平台依赖
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 and NSUInteger are defined as int and unsigned int,respectively. In 64-bit environments,NSInteger and NSUInteger 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.
| 类型 | 定义 | 建议 |
| 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 see below warning when scanning |
| CFIndex | %ld or %lx | The same as NSInteger |
| pointer | %p | %p adds 0x to the beginning of the output. If you don’t want that,use %lx and cast to long. |
| long long | %lld or %llx | long long is 64-bit on both 32- and 64-bit platforms |
| unsigned long long | %llu or %llx | unsigned long long is 64-bit on both 32- and 64-bit platforms |
The following example illustrates the use of %ld to format an NSInteger and the use of a cast.
| 1 2 | 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.
| 1 2 3 4 | 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.
总结以上是内存溢出为你收集整理的objective-c 字符串格式化全部内容,希望文章能够帮你解决objective-c 字符串格式化所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)