hexadecimal from convert color ios string hex swift

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)