在Obj-C中,我曾经将无符号整数n转换为带有
的十六进制字符串 NSString *st = [NSString stringWithFormat:@"%2X", n];
我试了很长时间才把它翻译成Swift语言,但没有成功。
答案 0 :(得分:98)
您现在可以:
let n = 14
var st = String(format:"%02X", n)
st += " is the hexadecimal representation of \(n)"
print(st)
0E is the hexadecimal representation of 14
注意:此示例中的2
是字段宽度,表示所需的最小长度。 0
告诉它在必要时使用前导0
填充结果。 (没有0
,结果将用前导空格填充)。当然,如果结果大于两个字符,则字段长度不会被剪裁为宽度2
;它将扩展到显示完整结果所需的任何长度。
这仅适用于导入Foundation
的内容(包括导入Cocoa
或UIKit
)。如果您正在进行 iOS 或 macOS 编程,这不是问题。
如果您需要X
,请使用大写A...F
x
如果您需要a...f
,请使用小写String(format: "%x %X", 64206, 64206) // "face FACE"
:
UInt32.max
如果要打印大于ll
的整数值,请将let n = UInt64.max
print(String(format: "%llX is hexadecimal for \(n)", n))
( el-el ,而不是 11 )添加到格式字符串:
FFFFFFFFFFFFFFFF is hexadecimal for 18446744073709551615
NSString
原始答案
您仍然可以使用var st = NSString(format:"%2X", n)
来执行此操作。格式为:
st
这会使NSString
成为+=
,因此+=
之类的内容无效。如果您希望能够将st
生成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"
然后你可以这样做:
{{1}}
答案 1 :(得分:48)
在Swift中,init
上有一个特定的String
方法正是如此:
let hex = String(0xF, radix: 16, uppercase: false)
println("hex=\(hex)") // Output: f
答案 2 :(得分:23)
使用Swift 3,根据您的需要,您可以选择以下三种方法之一来解决您的问题。
String
' init(_:radix:uppercase:)
初始值设定项 Swift String
有一个init(_:radix:uppercase:)
初始值设定项,声明如下:
init<T>(_ value: T, radix: Int = default, uppercase: Bool = default) where T : _SignedInteger
创建一个字符串,表示基数10或其他指定基数的给定值。
下面的Playground代码显示了如何使用String
创建一个以十六进制格式表示整数值的init(_:radix:uppercase:)
实例,而无需导入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"
String
&#39; init(format:_:)
初始值设定项 Foundation
提供String
个init(format:_:)
初始值设定项。 init(format:_:)
有以下声明:
init(format: String, _ arguments: CVarArg...)
返回一个
String
对象,该对象使用给定的格式字符串作为模板进行初始化,其余的参数值将替换为该模板。
Apple的字符串编程指南提供了String
和NSString
支持的格式说明符列表。在这些格式说明符中,%X
具有以下description:
无符号32位整数(
unsigned int
),使用数字0-9和大写A-F以十六进制打印。
下面的Playground代码显示了如何使用String
创建一个表示十六进制格式的整数值的init(format:_:)
实例:
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"
String
&#39; init(format:arguments:)
初始值设定项 Foundation
提供String
个init(format:arguments:)
初始值设定项。 init(format:arguments:)
有以下声明:
init(format: String, arguments: [CVarArg])
返回一个
String
对象,该对象使用给定的格式字符串作为模板初始化,其余的参数值将根据用户的默认语言环境替换。
下面的Playground代码显示了如何使用String
创建一个表示十六进制格式的整数值的init(format:arguments:)
实例:
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"
答案 3 :(得分:2)
使用
let string2 = String(format:"%02X", 1)
print(string2) // prints: "01"
在Swift3中,不需要导入基础,至少不在项目中。 String应具有NSString的所有功能。
答案 4 :(得分:1)
上面的答案适用于32位Int范围内的值,但是超过此值的值将无效,因为值将翻转。
您需要将length modifier用于大于32位Int
的值%x =无符号32位整数(unsigned int)
ll =长度修饰符,指定后续的d,o,u,x或X转换说明符适用于long long或unsigned long long参数。
let hexString = String(format:"%llX", decimalValue)
答案 5 :(得分:0)
Swift 5.2.4
let value = 200
let hexString = String(format: "%02X", value)