Penjelasan %02.2hhxdalam jawaban suara tinggi :
%: Memperkenalkan xspecifier konversi.
02: Lebar minimum dari nilai yang dikonversi adalah 2. Jika nilai yang dikonversi memiliki byte lebih sedikit dari lebar bidang, itu harus diisi dengan 0di sebelah kiri.
.2: Memberikan jumlah digit minimum yang muncul untuk xspecifier konversi.
hh: Menentukan bahwa xspecifier konversi berlaku untuk char yang ditandatangani atau argumen char yang tidak ditandatangani (argumen akan dipromosikan sesuai dengan promosi integer, tetapi nilainya akan dikonversi menjadi char yang ditandatangani atau char yang tidak ditandatangani sebelum dicetak).
x: Argumen unsigned akan dikonversi ke format heksadesimal unsigned dalam gaya "dddd"; huruf "abcdef" digunakan. Presisi menentukan jumlah minimum digit yang akan ditampilkan; jika nilai yang dikonversi dapat direpresentasikan dalam digit yang lebih sedikit, itu harus diperluas dengan nol di depan. Ketepatan standar adalah 1. Hasil konversi nol dengan ketepatan eksplisit nol tidak boleh berupa karakter.
Untuk lebih jelasnya, lihat spesifikasi IEEE printf .
Berdasarkan penjelasan di atas, saya pikir lebih baik untuk perubahan %02.2hhxke%02x atau %.2x.
Untuk Swift 5, metode berikut ini semuanya layak:
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)})
Tesnya adalah sebagai berikut:
let deviceToken = (0..<32).reduce(Data(), {$0 + [$1]})
print(deviceToken.reduce("", {$0 + String(format: "%.2x", $1)}))
// Print content:
// 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
NSLog, yang dicetaknewDeviceToken?