ios Come convertire una stringa Int in Hex in Swift




(4)

In Obj-C ho usato per convertire un intero non firmato n in una stringa esadecimale con

 NSString *st = [NSString stringWithFormat:@"%2X", n];

Ho provato a lungo a tradurre questo in Swift, ma senza successo.


Answer #1

Le risposte sopra funzionano bene per i valori nell'intervallo di un Int a 32 bit, ma i valori su questo non funzioneranno quando il valore verrà invertito.

È necessario utilizzare il modificatore di lunghezza per valori maggiori di Int a 32 bit

% x = numero intero a 32 bit senza segno (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 long long o unsigned long long.

let hexString = String(format:"%llX", decimalValue)

Answer #2

In Swift c'è uno specifico metodo di init su String esattamente per questo:

let hex = String(0xF, radix: 16, uppercase: false)
println("hex=\(hex)") // Output: f

Answer #3

Usare

let string2 = String(format:"%02X", 1)
print(string2) // prints: "01"

In Swift3 non è richiesta una base di importazione, almeno non in un progetto. La stringa dovrebbe avere tutte le funzionalità di NSString.


Answer #4

Con Swift 3, in base alle tue esigenze, puoi scegliere uno dei tre seguenti metodi per risolvere il tuo problema.

# 1. Utilizzo dell'inizializzatore init(_:radix:uppercase:) String

Swift String ha un init(_:radix:uppercase:) con la seguente dichiarazione:

init<T>(_ value: T, radix: Int = default, uppercase: Bool = default) where T : _SignedInteger

Crea una stringa che rappresenta il valore specificato in base 10 o un'altra base specificata.

Il codice Playground di seguito mostra come creare un'istanza String 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"

# 2. Utilizzo dell'inizializzatore init(format:​_:​) String

Foundation fornisce String un init(format:​_:​) :). init(format:​_:​) ha la seguente dichiarazione:

init(format: String, _ arguments: CVarArg...)

Restituisce un oggetto String inizializzato utilizzando una determinata stringa di formato come modello in cui i valori degli argomenti rimanenti vengono sostituiti.

La Guida alla programmazione delle stringhe di Apple fornisce un elenco degli specificatori di formato supportati da String e NSString . Tra quegli specificatori di formato, %X ha la seguente descrizione :

Numero intero a 32 bit unsigned int ( unsigned int ), stampato in formato esadecimale utilizzando le cifre da 0 a 9 e lettere maiuscole A-F.

Il codice Playground di seguito mostra come creare un'istanza String 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"

# 3. Utilizzo dell'inizializzatore init(format:​arguments:​) String

Foundation fornisce String un init(format:​arguments:​) :). init(format:​arguments:​) ha la seguente dichiarazione:

init(format: String, arguments: [CVarArg])

Restituisce un oggetto String inizializzato utilizzando una determinata stringa di formato come modello in cui i valori degli argomenti rimanenti vengono sostituiti in base alle impostazioni locali predefinite dell'utente.

Il codice Playground qui sotto mostra come creare un'istanza String 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"




swift