คำอธิบาย%02.2hhx
ในคำตอบการโหวตสูง:
%
: แนะนำตัวx
ระบุการแปลง
02
: ความกว้างต่ำสุดของค่าที่แปลงแล้วคือ 2 หากค่าที่แปลงแล้วมีจำนวนไบต์น้อยกว่าความกว้างของเขตข้อมูลจะต้องถูกเพิ่มด้วย0
ด้านซ้าย
.2
: กำหนดจำนวนหลักขั้นต่ำที่จะปรากฏสำหรับตัวx
ระบุการแปลง
hh
: ระบุว่าตัวx
ระบุการแปลงใช้กับอาร์กิวเมนต์ถ่านที่ลงนามแล้วหรือที่ไม่ได้ลงชื่อ (อาร์กิวเมนต์จะได้รับการเลื่อนตำแหน่งตามการเลื่อนเลขจำนวนเต็ม แต่ค่าของมันจะถูกแปลงเป็นถ่านที่ลงนามหรือถ่านที่ไม่ได้ลงชื่อก่อนพิมพ์)
x
: อาร์กิวเมนต์ที่ไม่ได้ลงชื่อจะถูกแปลงเป็นรูปแบบเลขฐานสิบหกที่ไม่ได้ลงชื่อในสไตล์ "dddd"; ใช้ตัวอักษร "abcdef" ความแม่นยำระบุจำนวนหลักต่ำสุดที่จะปรากฏ; หากค่าที่ถูกแปลงสามารถแสดงเป็นตัวเลขที่น้อยลงก็จะถูกขยายด้วยศูนย์นำ ความแม่นยำเริ่มต้นคือ 1 ผลลัพธ์ของการแปลงศูนย์ด้วยความแม่นยำที่ชัดเจนของศูนย์จะต้องไม่มีอักขระ
สำหรับรายละเอียดเพิ่มเติมโปรดดูที่สเปค printf IEEE
ขึ้นอยู่กับสาเหตุดังกล่าวทำให้ผมคิดว่ามันจะดีกว่าที่จะมีการเปลี่ยนแปลง%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
?