In Obj-C ho usato per convertire un intero senza segno n in una stringa esadecimale con
NSString *st = [NSString stringWithFormat:@"%2X", n];
Ho provato a lungo a tradurlo in un linguaggio Swift, ma senza successo.
Risposte:
Ora puoi fare:
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
in questo esempio è la larghezza del campo e rappresenta la lunghezza minima desiderata. Gli 0
dice di riempire il risultato con le iniziali 0
, se necessario. (Senza il 0
, il risultato sarebbe riempito con spazi iniziali). Ovviamente, se il risultato è maggiore di due caratteri, la lunghezza del campo non verrà tagliata a una larghezza di 2
; si espanderà alla lunghezza necessaria per visualizzare il risultato completo.
Funziona solo se hai Foundation
importato (questo include l'importazione di Cocoa
o UIKit
). Questo non è un problema se stai programmando iOS o macOS .
Usa le maiuscole X
se vuoi A...F
e le minuscole x
se vuoi a...f
:
String(format: "%x %X", 64206, 64206) // "face FACE"
Se vuoi stampare valori interi maggiori di UInt32.max
, aggiungi ll
( el-el , non undici ) alla stringa di formato:
let n = UInt64.max
print(String(format: "%llX is hexadecimal for \(n)", n))
FFFFFFFFFFFFFFFF is hexadecimal for 18446744073709551615
Risposta originale
Puoi ancora usare NSString
per farlo. Il formato è:
var st = NSString(format:"%2X", n)
Questo fa st
un NSString
, quindi cose come +=
non funzionano. Se vuoi essere in grado di aggiungere alla stringa con +=
make st
in un String
simile:
var st = NSString(format:"%2X", n) as String
o
var st = String(NSString(format:"%2X", n))
o
var st: String = NSString(format:"%2X", n)
Quindi puoi fare:
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"
In Swift esiste un init
metodo specifico String
per esattamente questo:
let hex = String(0xF, radix: 16, uppercase: false)
println("hex=\(hex)") // Output: f
"0xF"
in un UInt
?
let number = UInt("0xF".stringByReplacingOccurrencesOfString("0x", withString:""), radix: 16)
, number
sarà del tipo UInt?
Se hai bisogno di più fai una domanda :)
String(0xf, radix: 0x10, uppercase: false)
Con Swift 5, in base alle tue esigenze, puoi scegliere uno dei tre metodi seguenti per risolvere il tuo problema.
String
l' init(_:radix:uppercase:)
inizializzatore diSwift String
ha un init(_:radix:uppercase:)
inizializzatore con la seguente dichiarazione:
init<T>(_ value: T, radix: Int = 10, uppercase: Bool = false) where T : BinaryInteger
Crea una stringa che rappresenta il valore dato in base 10 o qualche altra base specificata.
Il codice Playground di seguito mostra come creare String
un'istanza che rappresenta un valore intero in formato esadecimale utilizzando init(_:radix:uppercase:)
e senza dover importare 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
l' init(format:_:)
inizializzatore diFoundation
fornisce String
un init(format:_:)
inizializzatore. init(format:_:)
ha la seguente dichiarazione:
init(format: String, _ arguments: CVarArg...)
Restituisce un
String
oggetto inizializzato utilizzando una determinata stringa di formato come modello in cui vengono sostituiti i valori dell'argomento rimanenti.
La Guida alla programmazione di stringhe di Apple fornisce un elenco degli identificatori di formato supportati da String
e NSString
. Tra questi specificatori di formato, %X
ha la seguente descrizione :
Intero a 32 bit senza segno (
unsigned int
), stampato in esadecimale utilizzando le cifre 0–9 e la A – F maiuscola.
Il codice Playground di seguito mostra come creare String
un'istanza che rappresenta un valore intero in formato esadecimale 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
l' init(format:arguments:)
inizializzatore diFoundation
fornisce String
un init(format:arguments:)
inizializzatore. init(format:arguments:)
ha la seguente dichiarazione:
init(format: String, arguments: [CVarArg])
Restituisce un
String
oggetto inizializzato utilizzando una determinata stringa di formato come modello in cui i restanti valori dell'argomento vengono sostituiti in base alle impostazioni internazionali predefinite dell'utente.
Il codice Playground di seguito mostra come creare String
un'istanza che rappresenta un valore intero in formato esadecimale 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"
Usare
let string2 = String(format:"%02X", 1)
print(string2) // prints: "01"
In Swift3 l'importazione di base non è richiesta, almeno non in un progetto. String dovrebbe avere tutte le funzionalità come NSString.
Le risposte precedenti funzionano bene per i valori nell'intervallo di un Int a 32 bit, ma i valori superiori a questo non funzioneranno poiché il valore verrà trasferito.
È necessario utilizzare il modificatore di lunghezza per i valori maggiori di un Int a 32 bit
% x = intero senza segno a 32 bit (int senza segno)
ll = Modificatori di lunghezza che specificano che un identificatore di conversione seguente d, o, u, x o X si applica a un argomento lungo lungo o lungo lungo senza segno.
let hexString = String(format:"%llX", decimalValue)
Int("hexaString", radix: 16)
Swift 5.2.4
let value = 200
let hexString = String(format: "%02X", value)
String s = "0x" + String(n, radix: 16)