在Obj-C中,我曾经使用以下命令将无符号整数n转换为十六进制字符串:
NSString *st = [NSString stringWithFormat:@"%2X", n];
我花了很长时间尝试将其翻译成Swift语言,但未成功。
Answers:
您现在可以执行以下操作:
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
(el-el,而不是11):
let n = UInt64.max
print(String(format: "%llX is hexadecimal for \(n)", n))
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"
在Swift中,有一种特定的init
方法可以实现String
以下目的:
let hex = String(0xF, radix: 16, uppercase: false)
println("hex=\(hex)") // Output: f
"0xF"
成一个UInt
?
let number = UInt("0xF".stringByReplacingOccurrencesOfString("0x", withString:""), radix: 16)
,number
将为类型UInt?
如果您需要更多问题,请问一个问题:)
String(0xf, radix: 0x10, uppercase: false)
使用Swift 5,您可以根据需要选择以下三种方法之一来解决问题。
String
的init(_:radix:uppercase:)
初始值设定项SwiftString
有一个init(_:radix:uppercase:)
带有以下声明的初始化程序:
init<T>(_ value: T, radix: Int = 10, uppercase: Bool = false) where T : BinaryInteger
创建一个字符串,表示以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
的init(format:_:)
初始值设定项Foundation
提供String
一个init(format:_:)
初始化程序。init(format:_:)
具有以下声明:
init(format: String, _ arguments: CVarArg...)
返回一个
String
对象,该对象使用给定的格式字符串作为模板进行初始化,其余参数值将替换为该对象。
Apple的String编程指南列出了String
and支持的格式说明符NSString
。在这些格式说明符中,%X
具有以下描述:
无符号的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
的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"
上面的答案对于32位Int范围内的值都可以正常工作,但是超过此值的值将不起作用,因为该值会翻转。
您需要将length修饰符用于大于32bit Int的值
%x = 32位无符号整数(无符号int)
ll =长度修饰符,指定后面的d,o,u,x或X转换说明符适用于long long或无符号long long参数。
let hexString = String(format:"%llX", decimalValue)
Int("hexaString", radix: 16)
String s = "0x" + String(n, radix: 16)