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: 2in questo esempio è la larghezza del campo e rappresenta la lunghezza minima desiderata. Gli 0dice 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 Foundationimportato (questo include l'importazione di Cocoao UIKit). Questo non è un problema se stai programmando iOS o macOS .
Usa le maiuscole Xse vuoi A...Fe le minuscole xse 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 NSStringper farlo. Il formato è:
var st = NSString(format:"%2X", n)
Questo fa stun NSString, quindi cose come +=non funzionano. Se vuoi essere in grado di aggiungere alla stringa con +=make stin un Stringsimile:
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 initmetodo specifico Stringper 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), numbersarà 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.
Stringl' init(_:radix:uppercase:)inizializzatore diSwift Stringha 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 Stringun'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"
Stringl' init(format:_:)inizializzatore diFoundationfornisce Stringun init(format:_:)inizializzatore. init(format:_:)ha la seguente dichiarazione:
init(format: String, _ arguments: CVarArg...)
Restituisce un
Stringoggetto 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 Stringe NSString. Tra questi specificatori di formato, %Xha 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 Stringun'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"
Stringl' init(format:arguments:)inizializzatore diFoundationfornisce Stringun init(format:arguments:)inizializzatore. init(format:arguments:)ha la seguente dichiarazione:
init(format: String, arguments: [CVarArg])
Restituisce un
Stringoggetto 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 Stringun'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)