iPhone开发--字符串格式化字符的意义
2012-03-08 20:41
274 查看
今天看见一段代码,有个%p,我当时就迷惑了,不知道代表什么意思。之后找了网络和帮助文档,最后知道是格式化指针。哈,把帮助文档原文复制如下:
String Format Specifiers
This article summarizes the format specifiers supported by string formatting methods and functions.
Format Specifiers
The format specifiers supported by the NSStringformatting 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); |
2, there is one extra case with scanning: you must distinguish the types for
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.
相关文章推荐
- iphone开发笔记——与c#中split一样的将字符串按特定字符分割成数组
- android开发过程中将json日期字符串,转换成JAVA中Date类型格式化字符串
- Objective-C ,ios,iphone开发基础:如何判断一个字符是不是中文字符。计算一段字符串的长度。
- IOS 开发中判断字符串是否为空字符的方法
- iOS开发-- 字符串分割(多个字符分割一个字符串)、拼接
- IOS开发语言Swift入门连载---字符串和字符
- sprintf 编辑 sprintf指的是字符串格式化命令,主要功能是把格式化的数据写入某个字符串中。sprintf 是个变参函数。使用sprintf 对于写入buffer的字符数是没有
- 格式化字符串——以C++的名义 - [软件开发]
- iPhone开发 对字符串进行url编码转换
- java格式化字符串,在指定位置插入指定字符串,兼容中英文以及特殊字符,例如:换行,用于解决生成pdf换行问题等问题
- iphone开发NSString字符串常用方法
- format()方法的格式字符串中各种格式化定义字符--《喜科堂c#学习笔记》
- 串的处理 在实际的开发工作中,对字符串的处理是最常见的编程任务。本题目即是要求程序对用户输入的串进行处理。具体规则如下: 1. 把每个单词的首字母变为大写。 2. 把数字与字母之间用下划线字符(_)分
- iPhone开发--正则表达式获取字符串中的内容
- iOS开发NSString篇:字符串每隔几个字符插入某个字符
- c#中字符串按指定字符进行数组化,并按指定要求格式化数组内的字符串
- iPhone开发 -- 图标文件的意义
- iphone ios 字符串NSString格式化format输出
- IOS开发中判断字符串是否为空字符的方法
- IOS 开发中判断字符串是否为空字符的方法