如何在Swift中将Int转换为Hex字符串

时间:2014-06-15 12:17:35

标签: ios string hex swift

在Obj-C中,我曾经将无符号整数n转换为带有

的十六进制字符串
 NSString *st = [NSString stringWithFormat:@"%2X", n];

我试了很长时间才把它翻译成Swift语言,但没有成功。

6 个答案:

答案 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的内容(包括导入CocoaUIKit)。如果您正在进行 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,根据您的需要,您可以选择以下三种方法之一来解决您的问题。

#1。使用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"

#2。使用String&#39; init(format:​_:​)初始值设定项

Foundation提供Stringinit(format:​_:​)初始值设定项。 init(format:​_:​)有以下声明:

init(format: String, _ arguments: CVarArg...)
  

返回一个String对象,该对象使用给定的格式字符串作为模板进行初始化,其余的参数值将替换为该模板。

Apple的字符串编程指南提供了StringNSString支持的格式说明符列表。在这些格式说明符中,%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"

#3。使用String&#39; init(format:​arguments:​)初始值设定项

Foundation提供Stringinit(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)