En Obj-C solía convertir un entero sin signo n en una cadena hexadecimal con
NSString *st = [NSString stringWithFormat:@"%2X", n];
Intenté durante mucho tiempo traducir esto al lenguaje Swift, pero sin éxito.
Respuestas:
Ahora puedes hacer:
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
Nota: 2
en este ejemplo es el ancho del campo y representa la longitud mínima deseada. El 0
le dice que rellene el resultado con interlineados 0
si es necesario. (Sin el 0
, el resultado se rellenaría con espacios iniciales). Por supuesto, si el resultado tiene más de dos caracteres, la longitud del campo no se recortará a un ancho de 2
; se expandirá a la longitud necesaria para mostrar el resultado completo.
Esto solo funciona si ha Foundation
importado (esto incluye la importación de Cocoa
o UIKit
). Esto no es un problema si está programando iOS o macOS .
Use mayúsculas X
si lo desea A...F
y minúsculas x
si lo desea a...f
:
String(format: "%x %X", 64206, 64206) // "face FACE"
Si desea imprimir valores enteros mayores que UInt32.max
, agregue ll
( el-el , no once ) a la cadena de formato:
let n = UInt64.max
print(String(format: "%llX is hexadecimal for \(n)", n))
FFFFFFFFFFFFFFFF is hexadecimal for 18446744073709551615
Respuesta original
Todavía puedes usar NSString
para hacer esto. El formato es:
var st = NSString(format:"%2X", n)
Esto hace st
un NSString
, entonces cosas como +=
no funcionan. Si desea poder agregar a la cadena con +=
makest
en una String
como esta:
var st = NSString(format:"%2X", n) as String
o
var st = String(NSString(format:"%2X", n))
o
var st: String = NSString(format:"%2X", n)
Entonces puedes hacer:
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"
En Swift hay un init
método específico String
para exactamente esto:
let hex = String(0xF, radix: 16, uppercase: false)
println("hex=\(hex)") // Output: f
"0xF"
a UInt
?
let number = UInt("0xF".stringByReplacingOccurrencesOfString("0x", withString:""), radix: 16)
, number
será de tipo UInt?
Si necesita más, haga una pregunta :)
String(0xf, radix: 0x10, uppercase: false)
Con Swift 5, según sus necesidades, puede elegir uno de los tres métodos siguientes para resolver su problema.
String
el init(_:radix:uppercase:)
inicializador deSwift String
tiene un init(_:radix:uppercase:)
inicializador con la siguiente declaración:
init<T>(_ value: T, radix: Int = 10, uppercase: Bool = false) where T : BinaryInteger
Crea una cadena que representa el valor dado en base 10, o alguna otra base especificada.
El siguiente código de Playground muestra cómo crear una String
instancia que representa un valor entero en formato hexadecimal usando init(_:radix:uppercase:)
y sin tener que importar 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
el init(format:_:)
inicializador deFoundation
proporciona String
uninit(format:_:)
inicializador. init(format:_:)
tiene la siguiente declaración:
init(format: String, _ arguments: CVarArg...)
Devuelve un
String
objeto inicializado mediante el uso de una cadena de formato determinada como plantilla en la que se sustituyen los valores restantes de los argumentos.
La Guía de programación de cadenas de Apple proporciona una lista de los especificadores de formato que son compatibles con String
y NSString
. Entre esos especificadores de formato,%X
tiene la siguiente descripción :
Entero de 32 bits sin signo (
unsigned int
), impreso en hexadecimal con los dígitos 0–9 y A – F en mayúsculas.
El siguiente código de Playground muestra cómo crear una String
instancia que represente un valor entero en formato hexadecimal con 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
el init(format:arguments:)
inicializador deFoundation
proporciona String
uninit(format:arguments:)
inicializador. init(format:arguments:)
tiene la siguiente declaración:
init(format: String, arguments: [CVarArg])
Devuelve un
String
objeto inicializado mediante el uso de una cadena de formato determinada como plantilla en la que los valores restantes de los argumentos se sustituyen de acuerdo con la configuración regional predeterminada del usuario.
El siguiente código de Playground muestra cómo crear una String
instancia que represente un valor entero en formato hexadecimal con 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"
Usar
let string2 = String(format:"%02X", 1)
print(string2) // prints: "01"
En Swift3 no se requiere una base de importación, al menos no en un proyecto. La cadena debe tener todas las funciones de NSString.
Las respuestas anteriores funcionan bien para valores en el rango de un Int de 32 bits, pero los valores por encima de esto no funcionarán ya que el valor se traspasará.
Debe utilizar el modificador de longitud para valores superiores a un Int de 32 bits
% x = entero de 32 bits sin signo (int sin signo)
ll = Modificadores de longitud que especifican que el siguiente especificador de conversión d, o, u, x o X se aplica a un argumento long long o unsigned long long.
let hexString = String(format:"%llX", decimalValue)
Int("hexaString", radix: 16)
Rápido 5.2.4
let value = 200
let hexString = String(format: "%02X", value)
String s = "0x" + String(n, radix: 16)