Объяснение %02.2hhx
в высоком голосе ответа :
%
: Вводит x
спецификатор конверсии.
02
: Минимальная ширина преобразованного значения равна 2. Если преобразованное значение имеет меньше байтов, чем ширина поля, оно должно быть дополнено 0
слева.
.2
: Предоставляет минимальное количество цифр, отображаемых для x
спецификатора преобразования.
hh
: Указывает, что x
спецификатор преобразования применяется к аргументу со знаком char или unsigned char (аргумент будет повышен в соответствии с целочисленными предложениями, но его значение должно быть преобразовано в char со знаком или unsigned char перед печатью).
x
: Аргумент без знака должен быть преобразован в шестнадцатеричный формат без знака в стиле "dddd"; буквы "abcdef" используются. Точность определяет минимальное количество отображаемых цифр; если конвертируемое значение может быть представлено меньшим количеством цифр, оно должно быть расширено начальными нулями. Точность по умолчанию равна 1. Результатом преобразования нуля с явной точностью нуля не должно быть символов.
Для получения дополнительной информации см. Спецификацию IEEE printf .
Исходя из приведенного выше объяснения, я думаю, что лучше изменить %02.2hhx
на %02x
или %.2x
.
Для Swift 5 возможны следующие методы:
deviceToken.map({String(format: "%02x", $0)}).joined()
deviceToken.map({String(format: "%.2x", $0)}).joined()
deviceToken.reduce("", {$0 + String(format: "%02x", $1)})
deviceToken.reduce("", {$0 + String(format: "%.2x", $1)})
Тест выглядит следующим образом:
let deviceToken = (0..<32).reduce(Data(), {$0 + [$1]})
print(deviceToken.reduce("", {$0 + String(format: "%.2x", $1)}))
// Print content:
// 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
NSLog
, тот, который печатаетnewDeviceToken
?