Giải thích về câu trả lời%02.2hhx
bỏ phiếu cao :
%
: Giới thiệu công x
cụ xác định chuyển đổi.
02
: Chiều rộng tối thiểu của giá trị được chuyển đổi là 2. Nếu giá trị được chuyển đổi có ít byte hơn chiều rộng trường, nó sẽ được đệm 0
bên trái.
.2
: Cung cấp số chữ số tối thiểu xuất hiện cho x
xác định chuyển đổi.
hh
: Chỉ định rằng x
xác định chuyển đổi áp dụng cho đối số char đã ký hoặc char không dấu (đối số sẽ được quảng cáo theo các quảng cáo số nguyên, nhưng giá trị của nó sẽ được chuyển đổi thành char đã ký hoặc char không dấu trước khi in).
x
: Đối số không dấu sẽ được chuyển đổi sang định dạng thập lục phân không dấu trong kiểu "dddd"; các chữ cái "abcdef" được sử dụng. Độ chính xác chỉ định số chữ số tối thiểu xuất hiện; nếu giá trị được chuyển đổi có thể được biểu thị bằng ít chữ số hơn, nó sẽ được mở rộng với các số 0 đứng đầu. Độ chính xác mặc định là 1. Kết quả của chuyển đổi 0 với độ chính xác rõ ràng bằng 0 sẽ không có ký tự.
Để biết thêm chi tiết, xem thông số kỹ thuật của printf .
Dựa trên lời giải thích trên, tôi nghĩ tốt hơn là thay đổi %02.2hhx
thành %02x
hoặc %.2x
.
Đối với Swift 5, các phương pháp sau đây đều khả thi:
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)})
Bài kiểm tra như sau:
let deviceToken = (0..<32).reduce(Data(), {$0 + [$1]})
print(deviceToken.reduce("", {$0 + String(format: "%.2x", $1)}))
// Print content:
// 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
NSLog
, cái nào in ranewDeviceToken
?