Come convertire una stringa da Int a Hex in Swift


Risposte:


139

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"

I numeri esadecimali e decimali sono invertiti in "7B è 123 in esadecimale", quindi l'espressione st deve essere corretta in: st = "(n) è" + Stringa (formato: "% 2X", n) + "in esadecimale"
Kevin Sliech

@KevinSliech, ammetto che è ambiguo. Intendevo come se qualcuno si avvicinasse e chiedesse "cosa rappresenta 7B?", E tu avresti risposto "7B è il numero 123 scritto in esadecimale".
vacawama

Trovo entrambi un po 'ambigui, soprattutto ora che li ho letti entrambi ~ 1000 volte. Un altro modo sarebbe scrivere: "0x7B = 123d" o qualcosa del genere. L'ambiguità potrebbe ingannare persone non esperte in sistemi di numeri alternativi.
Kevin Sliech

@KevinSliech, grazie. Ho reso la dichiarazione più chiara.
vacawama

1
In Swift4 devi usare "% 02X" invece di "% 2X" se vuoi inserire "0" se necessario ("% 2X" inserisci uno spazio)
Bubu

54

In Swift esiste un initmetodo specifico Stringper esattamente questo:

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

1
Come posso convertire questa stringa in UInt?
TomSawyer

3
vuoi convertire "0xF"in un UInt?
Rich

1
let number = UInt("0xF".stringByReplacingOccurrencesOfString("0x", withString:""), radix: 16), numbersarà del tipo UInt?Se hai bisogno di più fai una domanda :)
Rich

mayhap:String(0xf, radix: 0x10, uppercase: false)
Mazyod

@Rich Abbiamo questo metodo radix per NSString in Objective C?
Naresh Nallamsetty

39

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


# 1. Utilizzando Stringl' init(_:radix:uppercase:)inizializzatore di

Swift 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"

# 2. Utilizzando Stringl' init(format:​_:​)inizializzatore di

Foundationfornisce 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"

# 3. Utilizzando Stringl' init(format:​arguments:​)inizializzatore di

Foundationfornisce 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"

2

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.


1

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)

Aggiungi anche il codice per riconvertire esadecimale in decimale.
Varun Naharia

@VarunNahariaInt("hexaString", radix: 16)
Leo Dabus

0

Swift 5.2.4

let value = 200
let hexString = String(format: "%02X", value)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.