如何在Swift中将Int转换为hexstring
在Obj-C中,我用无符号整数n转换为hexstring
NSString *st = [NSString stringWithFormat:@"%2X", n]; 我试了很长时间把它翻译成Swift语言,但是没有成功。
你现在可以做:
 let n = 123 var st = String(format:"%2X", n) st += " is the hexadecimal representation of \(n)" // "7B is the hexadecimal representation of 123" 
 这只有在您导入了Foundation (这包括导入Cocoa或UIKit )时才有效。 如果您正在进行iOS或OS X编程,这不是问题。 
 如果你想A...F和小写的x如果你想要a...f大写的X a...f : 
 String(format: "%x %X", 64206, 64206) // "face FACE" 
原始答复
 你仍然可以使用NSString来做到这一点。 格式是: 
 var st = NSString(format:"%2X", n) 
 这使得一个NSString ,所以然后像+=东西不工作。 如果你想把+= make st的string追加到string中,如下所示: 
 var st = NSString(format:"%2X", n) as String 
要么
 var st = String(NSString(format:"%2X", n)) 
要么
 var st: String = NSString(format:"%2X", n) 
那你可以这样做:
 let n = 123 var st = NSString(format:"%2X", n) as String st += " is the hexadecimal representation of \(n)" // "7B is the hexadecimal representation of 123" 
 在Swift中,对于String有一个特定的init方法: 
 let hex = String(0xF, radix: 16, uppercase: false) println("hex=\(hex)") // Output: f 
用Swift 3,根据你的需要,你可以select以下三种方法之一来解决你的问题。
  #1。 使用String的init(_:radix:uppercase:)初始值设定项 
  Swift String有一个init(_:radix:uppercase:)初始值设定项,声明如下: 
 init<T>(_ value: T, radix: Int = default, uppercase: Bool = default) where T : _SignedInteger 
创build一个表示以10为底的给定值的string,或者其他指定的基数。
 下面的Playground代码展示了如何使用init(_:radix:uppercase:)创build一个以hex格式表示整数值的String实例,而无需导入Foundation : 
 let string1 = String(2, radix: 16) print(string1) // prints: "2" let string2 = String(211, radix: 16) print(string2) // prints: "d3" let string3 = String(211, radix: 16, uppercase: true) print(string3) // prints: "D3" 
  #2。 使用String的init(format:_:)初始值设定项 
  Foundation为String提供了一个init(format:_:)初始值设定项。  init(format:_:)具有以下声明: 
 init(format: String, _ arguments: CVarArg...) 
返回一个
String对象,它使用给定的格式string作为模板,其余的参数值被replace。
  Apple的String编程指南给出了String和NSString支持的格式说明符列表。 在这些格式说明符中, %X具有以下说明 : 
无符号32位整数(
unsigned int),使用数字0-9和大写字母A-F以hex打印。
 下面的Playground代码显示了如何使用init(format:_:)创build一个以hex格式表示整数值的String实例: 
 import Foundation let string1 = String(format:"%X", 2) print(string1) // prints: "2" let string2 = String(format:"%02X", 1) print(string2) // prints: "01" let string3 = String(format:"%02X", 211) print(string3) // prints: "D3" let string4 = String(format: "%02X, %02X, %02X", 12, 121, 255) print(string4) // prints: "0C, 79, FF" 
  #3。 使用String的init(format:arguments:) :)初始值设定项 
  Foundation提供了一个String init(format:arguments:) :)初始值设定项。  init(format:arguments:)具有以下声明: 
 init(format: String, arguments: [CVarArg]) 
返回通过使用给定的格式string作为模板初始化的
String对象,根据用户的默认语言环境将其余参数值replace为该模板。
 下面的Playground代码展示了如何使用init(format:arguments:)创build一个以hex格式表示整数值的String实例: 
 import Foundation let string1 = String(format:"%X", arguments: [2]) print(string1) // prints: "2" let string2 = String(format:"%02X", arguments: [1]) print(string2) // prints: "01" let string3 = String(format:"%02X", arguments: [211]) print(string3) // prints: "D3" let string4 = String(format: "%02X, %02X, %02X", arguments: [12, 121, 255]) print(string4) // prints: "0C, 79, FF" 
使用
 let string2 = String(format:"%02X", 1) print(string2) // prints: "01" 
在Swift3中不需要导入基础,至less不在一个Project中。 string应该具有作为NSString的所有function。
上面的解决scheme在32位Int的值范围内工作正常,但是值超过这个值将不会工作,因为值会翻转。
对于大于32位Int的值,您需要使用长度修饰符
%x =无符号32位整数(无符号整数)
ll =长度修饰符,指定后面的d,o,u,x或X转换说明符适用于long long或unsigned long long参数。
 let hexString = String(format:"%llX", decimalValue)