Спецификаторы формата строки
Эта статья суммирует спецификаторы формата, поддерживаемые строковыми методами форматирования и функциями.
Спецификаторы формата
Спецификаторы формата, поддерживаемые NSString
форматирование методов и функций форматирования CFString следует за IEEE printf спецификация; спецификаторы получены в итоге в Таблице 1. Обратите внимание на то, что можно также использовать “n$
” позиционные спецификаторы такой как %1$@ %2$s
. Для получения дополнительной информации посмотрите IEEE printf спецификация. Можно также использовать эти спецификаторы формата с NSLog
функция.
Табличные 1 Спецификаторы формата, поддерживаемые NSString
форматирование методов и функций форматирования CFString Спецификатор | Описание |
---|
%@
| Объект Objective C, распечатанный как строка, возвращенная descriptionWithLocale: при наличии, или description иначе. Также работы с CFTypeRef объекты, возвращая результат CFCopyDescription функция. |
%%
| '%' символ.
|
%d , %D
| 32-разрядное целое число со знаком (int ). |
%u , %U
| 32-разрядное целое число без знака (unsigned int ). |
%x
| 32-разрядное целое число без знака (unsigned int ), распечатанный в шестнадцатеричном использовании цифр 0-9 и нижнего регистра a–f. |
%X
| 32-разрядное целое число без знака (unsigned int ), распечатанный в шестнадцатеричном использовании цифр 0-9 и прописного A–F. |
%o , %O
| 32-разрядное целое число без знака (unsigned int ), распечатанный в восьмеричном. |
%f
| 64-разрядное число с плавающей точкой (double ). |
%e
| 64-разрядное число с плавающей точкой (double ), распечатанный в экспоненциальном представлении с помощью нижнего регистра e для представления экспоненты. |
%E
| 64-разрядное число с плавающей точкой (double ), распечатанный в экспоненциальном представлении с помощью верхнего регистра E для представления экспоненты. |
%g
| 64-разрядное число с плавающей точкой (double ), распечатанный в стиле %e если экспонента - меньше чем-4 или больше, чем или равный точности в стиле %f иначе. |
%G
| 64-разрядное число с плавающей точкой (double ), распечатанный в стиле %E если экспонента - меньше чем-4 или больше, чем или равный точности в стиле %f иначе. |
%c
| 8-разрядный символ без знака (unsigned char ), распечатанный NSLog() как символ ASCII, или, если не символ ASCII, в восьмеричном формате \\ddd или шестнадцатеричный формат Unicode \\udddd , где d цифра. |
%C
| 16-разрядный символ Unicode (unichar ), распечатанный NSLog() как символ ASCII, или, если не символ ASCII, в восьмеричном формате \\ddd или шестнадцатеричный формат Unicode \\udddd , где d цифра. |
%s
| Завершенный нулем массив 8-разрядных символов без знака. Поскольку %s спецификатор заставляет символы интерпретироваться в кодировании системного значения по умолчанию, результаты могут быть переменными, особенно со справа налево языками. Например, с RTL, %s когда символы не строго направлены, вставляет маркеры направления. Поэтому лучше избегать %s и укажите кодировки явно. |
%S
| Завершенный нулем массив 16-разрядных символов Unicode. |
%p
| Недействительный указатель (void * ), распечатанный в шестнадцатеричном с цифрами 0-9 и нижним регистром a–f, с продвижением 0x . |
%a
| 64-разрядное число с плавающей точкой (double ), распечатанный в экспоненциальном представлении с продвижением 0x и одна шестнадцатеричная цифра перед десятичной точкой с помощью нижнего регистра p представлять экспоненту. |
%A
| 64-разрядное число с плавающей точкой (double ), распечатанный в экспоненциальном представлении с продвижением 0X и одна шестнадцатеричная цифра перед десятичной точкой с помощью верхнего регистра P представлять экспоненту. |
%F
| 64-разрядное число с плавающей точкой (double ), распечатанный в десятичной записи. |
Табличные 2 модификаторы Длины, поддерживаемые NSString
форматирование методов и функций форматирования CFString Модификатор длины | Описание |
---|
h
| Модификатор длины, указывающий, что следующий d , o , u , x , или X спецификатор преобразования применяется к a short или unsigned short параметр. |
hh
| Модификатор длины, указывающий, что следующий d , o , u , x , или X спецификатор преобразования применяется к a signed char или unsigned char параметр. |
l
| Модификатор длины, указывающий, что следующий d , o , u , x , или X спецификатор преобразования применяется к a long или unsigned long параметр. |
ll , q
| Модификаторы длины, указывающие, что следующий d , o , u , x , или X спецификатор преобразования применяется к a long long или unsigned long long параметр. |
L
| Модификатор длины, указывающий, что следующий a , A , e , E , f , F , g , или G спецификатор преобразования применяется к a long double параметр. |
z
| Модификатор длины, указывающий, что следующий d , o , u , x , или X спецификатор преобразования применяется к a size_t или соответствующий аргумент типа целого числа со знаком. |
t
| Модификатор длины, указывающий, что следующий d , o , u , x , или X спецификатор преобразования применяется к a ptrdiff_t или соответствующий аргумент типа целого без знака. |
j
| Модификатор длины, указывающий, что следующий d , o , u , x , или X спецификатор преобразования применяется к a intmax_t или uintmax_t параметр. |
Зависимости от платформы
OS X использует несколько типов данных —NSInteger
, NSUInteger
,CGFloat
, и CFIndex
— обеспечить непротиворечивые средние значения представления значений в 32-и 64-разрядные среды. В 32-разрядной среде, NSInteger
и NSUInteger
определяются как int
и unsigned int
, соответственно. В 64-разрядных средах, NSInteger
и NSUInteger
определяются как long
и unsigned long
, соответственно. Для предотвращения потребности использовать различные спецификаторы printf-типа-стиля в зависимости от платформы можно использовать спецификаторы, показанные в Таблице 3. Обратите внимание на то, что в некоторых случаях Вам, вероятно, придется бросить значение.
Табличные 3 Спецификаторы формата для типов данныхВвести | Спецификатор формата | Соображения |
---|
NSInteger
| %ld или %lx
| Бросьте значение к long . |
NSUInteger
| %lu или %lx
| Бросьте значение к unsigned long . |
CGFloat
| %f или %g
| %f работы для плаваний и удваиваются при форматировании; но отметьте метод, описанный ниже для сканирования.
|
CFIndex
| %ld или %lx
| То же как NSInteger . |
указатель | %p или %zx
| %p добавляет 0x к началу вывода. Если Вы не хотите это, использовать %zx и никакое преобразование типа.
|
Следующий пример иллюстрирует использование %ld
отформатировать NSInteger
и использование броска.
NSInteger i = 42; |
printf("%ld\n", (long)i); |
В дополнение к соображениям, упомянутым в Таблице 3, существует один дополнительный случай со сканированием: необходимо отличить типы для float
и double
. Необходимо использовать %f
для плавания, %lf
для дважды. Если необходимо использовать scanf
(или вариант этого) с CGFloat
, переключатель к double
вместо этого, и копия double
к CGFloat
.
CGFloat imageWidth; |
double tmp; |
sscanf (str, "%lf", &tmp); |
imageWidth = tmp; |
Важно помнить это %lf
не представляет CGFloat
правильно или на 32-или на 64-разрядные платформы. Это в отличие от этого %ld
, который работает на long
во всех случаях.