如何在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)