ios - from - Cómo convertir un Int a Hex String en Swift
uicolor ios (5)
En Swift hay un método de init
específico en String
para exactamente esto:
let hex = String(0xF, radix: 16, uppercase: false)
println("hex=/(hex)") // Output: f
En Obj-C solía convertir un entero sin signo n en una cadena hexagonal con
NSString *st = [NSString stringWithFormat:@"%2X", n];
Intenté durante mucho tiempo traducir esto al lenguaje Swift, pero sin éxito.
Ahora puede hacer:
let n = 123
var st = String(format:"%2X", n)
st += " is the hexadecimal representation of /(n)"
// "7B is the hexadecimal representation of 123"
Esto solo funciona si tiene Foundation
importado (esto incluye la importación de Cocoa
o UIKit
). Esto no es un problema si estás haciendo la programación de iOS o OS X.
Usa mayúsculas X
si quieres A...F
y minúsculas x
si quieres a...f
:
String(format: "%x %X", 64206, 64206) // "face FACE"
Respuesta original
Aún puede usar NSString
para hacer esto. El formato es:
var st = NSString(format:"%2X", n)
Esto hace st
NSString
, entonces cosas como +=
no funcionan. Si quieres poder añadir a la cadena con +=
make st
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"
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. String debe tener toda la funcionalidad como NSString.
Con Swift 3, de acuerdo con sus necesidades, puede elegir uno de los tres métodos siguientes para resolver su problema.
# 1. Usando el init(_:radix:uppercase:)
String
Swift String
tiene un init(_:radix:uppercase:)
con la siguiente declaración:
init<T>(_ value: T, radix: Int = default, uppercase: Bool = default) where T : _SignedInteger
Crea una cadena que representa el valor dado en la base 10, o alguna otra base especificada.
El código de Playground a continuación muestra cómo crear una instancia de String
que represente un valor entero en formato hexadecimal utilizando 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"
# 2. Usar el init(format:_:)
String
Foundation
proporciona un init(format:_:)
String
a init(format:_:)
:). init(format:_:)
tiene la siguiente declaración:
init(format: String, _ arguments: CVarArg...)
Devuelve un objeto
String
inicializado utilizando una cadena de formato dada como una plantilla en la que se sustituyen los valores de argumento restantes.
La Guía de programación de cadenas de Apple proporciona una lista de los especificadores de formato admitidos por String
y NSString
. Entre los especificadores de formato, %X
tiene la siguiente descripción :
Entero de 32 bits sin signo (
unsigned int
), impreso en hexadecimal usando los dígitos 0-9 y mayúsculas A-F.
El código de Playground a continuación muestra cómo crear una instancia de String
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"
# 3. Usar el init(format:arguments:)
String
Foundation
proporciona un iniciador String
a init(format:arguments:)
:). init(format:arguments:)
tiene la siguiente declaración:
init(format: String, arguments: [CVarArg])
Devuelve un objeto
String
inicializado utilizando una cadena de formato dada como una plantilla en la que los valores de argumento restantes se sustituyen de acuerdo con la configuración regional predeterminada del usuario.
El código de Playground a continuación muestra cómo crear una instancia de String
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"
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 revertirá.
Necesita utilizar el modificador de longitud para valores superiores a un Int de 32 bits
% x = entero sin signo de 32 bits (sin signo int)
ll = modificadores de longitud que especifican que el siguiente especificador de conversión d, o, u, x o X se aplica a un argumento largo largo o largo largo sin signo.
let hexString = String(format:"%llX", decimalValue)