Explicación de %02.2hhx
en la respuesta de alta votación :
%
: Presenta el x
especificador de conversión.
02
: El ancho mínimo del valor convertido es 2. Si el valor convertido tiene menos bytes que el ancho del campo, se rellenará 0
a la izquierda.
.2
: Proporciona el número mínimo de dígitos que deben aparecer para el x
especificador de conversión.
hh
: Especifica que el x
especificador de conversión se aplica a un argumento con carácter firmado o sin signo (el argumento se habrá promocionado de acuerdo con las promociones de enteros, pero su valor se convertirá en carácter con signo o sin signo antes de imprimir).
x
: El argumento sin signo se convertirá al formato hexadecimal sin signo en el estilo "dddd"; se usan las letras "abcdef". La precisión especifica el número mínimo de dígitos a aparecer; Si el valor que se está convirtiendo puede representarse en menos dígitos, se expandirá con ceros a la izquierda. La precisión predeterminada es 1. El resultado de convertir cero con una precisión explícita de cero no será caracteres.
Para obtener más detalles, consulte la especificación IEEE printf .
Basado en la explicación anterior, creo que es mejor cambiar %02.2hhx
a %02x
o %.2x
.
Para Swift 5, los siguientes métodos son factibles:
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)})
La prueba es la siguiente:
let deviceToken = (0..<32).reduce(Data(), {$0 + [$1]})
print(deviceToken.reduce("", {$0 + String(format: "%.2x", $1)}))
// Print content:
// 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
NSLog
, el que imprimenewDeviceToken
?