let n = 14var st = String(format:"%02X", n)
st += " is the hexadecimal representation of \(n)"print(st)
0E is the hexadecimal representation of 14
Nota: 2en este ejemplo es el ancho del campo y representa la longitud mínima deseada. El 0le dice que rellene el resultado con interlineados 0si 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 Foundationimportado (esto incluye la importación de Cocoao UIKit). Esto no es un problema si está programando iOS o macOS .
Use mayúsculas Xsi lo desea A...Fy minúsculas xsi lo desea a...f:
Todavía puedes usar NSString para hacer esto. El formato es:
var st = NSString(format:"%2X", n)
Esto hace stun NSString, entonces cosas como +=no funcionan. Si desea poder agregar a la cadena con +=makest en una Stringcomo esta:
var st = NSString(format:"%2X", n) asString
o
var st = String(NSString(format:"%2X", n))
o
var st: String = NSString(format:"%2X", n)
Entonces puedes hacer:
let n = 123var st = NSString(format:"%2X", n) asString
st += " is the hexadecimal representation of \(n)"// "7B is the hexadecimal representation of 123"
Los números hexadecimales y decimales están invertidos en "7B es 123 en hexadecimal", por lo que la expresión st debe corregirse a: st = "(n) es" + Cadena (formato: "% 2X", n) + "en hexadecimal"
Kevin Sliech
@KevinSliech, admito que es ambiguo. Lo dije en serio como si alguien se acercara y preguntara, "¿qué representa 7B?", Y tu responderías "7B es el número 123 escrito en hexadecimal".
vacawama
Encuentro ambos un poco ambiguos, especialmente ahora que los he leído ~ 1000 veces. Otra forma sería escribir: "0x7B = 123d" o algo así. La ambigüedad podría confundir a las personas que no estén bien versadas en sistemas de números alternativos.
Kevin Sliech
@KevinSliech, gracias. Hice la declaración más clara.
vacawama
1
En Swift4 debe utilizar "% 02X" en lugar de "% 2X" si desea "0" inicial si es necesario ("% 2X" inserte un espacio)
Bubu
54
En Swift hay un initmétodo específico Stringpara exactamente esto:
let hex = String(0xF, radix: 16, uppercase: false)
println("hex=\(hex)") // Output: f
let number = UInt("0xF".stringByReplacingOccurrencesOfString("0x", withString:""), radix: 16), numberserá de tipo UInt?Si necesita más, haga una pregunta :)
Rich
mayhap:String(0xf, radix: 0x10, uppercase: false)
Mazyod
@Rich ¿Tenemos este método de base para NSString en Objective C?
Naresh Nallamsetty
39
Con Swift 5, según sus necesidades, puede elegir uno de los tres métodos siguientes para resolver su problema.
# 1. Usando Stringel init(_:radix:uppercase:)inicializador de
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 Stringinstancia que representa un valor entero en formato hexadecimal usando init(_:radix:uppercase:)y sin tener que importar Foundation:
# 2. Usando Stringel init(format:_:)inicializador de
Foundationproporciona Stringuninit(format:_:) inicializador. init(format:_:)tiene la siguiente declaración:
init(format: String, _ arguments: CVarArg...)
Devuelve un Stringobjeto 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 Stringy 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 Stringinstancia que represente un valor entero en formato hexadecimal con init(format:_:):
# 3. Usando Stringel init(format:arguments:)inicializador de
Foundationproporciona Stringuninit(format:arguments:) inicializador. init(format:arguments:)tiene la siguiente declaración:
init(format: String, arguments: [CVarArg])
Devuelve un Stringobjeto 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 Stringinstancia que represente un valor entero en formato hexadecimal con init(format:arguments:):
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á.
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)
String s = "0x" + String(n, radix: 16)
Respuestas:
Ahora puedes hacer:
let n = 14 var st = String(format:"%02X", n) st += " is the hexadecimal representation of \(n)" print(st)
Nota:
2
en este ejemplo es el ancho del campo y representa la longitud mínima deseada. El0
le dice que rellene el resultado con interlineados0
si es necesario. (Sin el0
, 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 de2
; se expandirá a la longitud necesaria para mostrar el resultado completo.Esto solo funciona si ha
Foundation
importado (esto incluye la importación deCocoa
oUIKit
). Esto no es un problema si está programando iOS o macOS .Use mayúsculas
X
si lo deseaA...F
y minúsculasx
si lo deseaa...f
:String(format: "%x %X", 64206, 64206) // "face FACE"
Si desea imprimir valores enteros mayores que
UInt32.max
, agreguell
( el-el , no once ) a la cadena de formato:let n = UInt64.max print(String(format: "%llX is hexadecimal for \(n)", n))
Respuesta original
Todavía puedes usar
NSString
para hacer esto. El formato es:var st = NSString(format:"%2X", n)
Esto hace
st
unNSString
, entonces cosas como+=
no funcionan. Si desea poder agregar a la cadena con+=
makest
en unaString
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"
fuente
En Swift hay un
init
método específicoString
para exactamente esto:let hex = String(0xF, radix: 16, uppercase: false) println("hex=\(hex)") // Output: f
fuente
"0xF"
aUInt
?let number = UInt("0xF".stringByReplacingOccurrencesOfString("0x", withString:""), radix: 16)
,number
será de tipoUInt?
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.
# 1. Usando
String
elinit(_:radix:uppercase:)
inicializador deSwift
String
tiene uninit(_:radix:uppercase:)
inicializador con la siguiente declaración:init<T>(_ value: T, radix: Int = 10, uppercase: Bool = false) where T : BinaryInteger
El siguiente código de Playground muestra cómo crear una
String
instancia que representa un valor entero en formato hexadecimal usandoinit(_:radix:uppercase:)
y sin tener que importarFoundation
: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. Usando
String
elinit(format:_:)
inicializador deFoundation
proporcionaString
uninit(format:_:)
inicializador.init(format:_:)
tiene la siguiente declaración:init(format: String, _ arguments: CVarArg...)
La Guía de programación de cadenas de Apple proporciona una lista de los especificadores de formato que son compatibles con
String
yNSString
. Entre esos especificadores de formato,%X
tiene la siguiente descripción :El siguiente código de Playground muestra cómo crear una
String
instancia que represente un valor entero en formato hexadecimal coninit(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. Usando
String
elinit(format:arguments:)
inicializador deFoundation
proporcionaString
uninit(format:arguments:)
inicializador.init(format:arguments:)
tiene la siguiente declaración:init(format: String, arguments: [CVarArg])
El siguiente código de Playground muestra cómo crear una
String
instancia que represente un valor entero en formato hexadecimal coninit(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"
fuente
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.
fuente
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)
fuente
Int("hexaString", radix: 16)
Rápido 5.2.4
let value = 200 let hexString = String(format: "%02X", value)
fuente