let n =14var st =String(format:"%02X", n)
st +=" is the hexadecimal representation of \(n)"
print(st)
0E is the hexadecimal representation of 14
Hinweis: In 2diesem Beispiel ist die Feldbreite angegeben und stellt die gewünschte Mindestlänge dar . Das 0weist es an, das Ergebnis bei 0Bedarf mit führenden zu füllen . (Ohne das 0würde das Ergebnis mit führenden Leerzeichen aufgefüllt). Wenn das Ergebnis größer als zwei Zeichen ist, wird die Feldlänge natürlich nicht auf eine Breite von 2; Es wird auf die Länge erweitert, die zur Anzeige des vollständigen Ergebnisses erforderlich ist.
Dies funktioniert nur, wenn Sie Foundationimportiert haben (dies schließt den Import von Cocoaoder ein UIKit). Dies ist kein Problem, wenn Sie iOS- oder MacOS- Programme ausführen .
Verwenden Sie Großbuchstaben, Xwenn Sie möchten, A...Fund Kleinbuchstaben, xwenn Sie möchten a...f:
String(format:"%x %X",64206,64206)//"face FACE"
Wenn Sie ganzzahlige Werte größer als drucken möchten UInt32.max, fügen Sie der Formatzeichenfolge ll( el-el , nicht elf ) hinzu:
let n =UInt64.max
print(String(format:"%llX is hexadecimal for \(n)", n))
FFFFFFFFFFFFFFFF is hexadecimal for18446744073709551615
Ursprüngliche Antwort
Sie können dies weiterhin verwenden NSString. Das Format ist:
var st =NSString(format:"%2X", n)
Das macht stein NSString, also dann +=funktionieren Dinge wie nicht. Wenn Sie in der Lage sein möchten, die Zeichenfolge mit +=make stin a Stringlike wie folgt anzuhängen :
var st =NSString(format:"%2X", n)asString
oder
var st =String(NSString(format:"%2X", n))
oder
var st:String=NSString(format:"%2X", n)
Dann können Sie tun:
let n =123var st =NSString(format:"%2X", n)asString
st +=" is the hexadecimal representation of \(n)"//"7B is the hexadecimal representation of 123"
Die Hex- und Dezimalzahlen werden in "7B ist 123 in hex" umgekehrt, daher sollte der st-Ausdruck korrigiert werden zu: st = "(n) ist" + String (Format: "% 2X", n) + "in hex"
Kevin Sliech
@ KevinSliech, ich gebe zu, dass es mehrdeutig ist. Ich meinte es so, als ob jemand auftauchte und fragte: "Was bedeutet 7B?", Und Sie antworteten: "7B ist die hexadezimal geschriebene Zahl 123".
Vacawama
Ich finde beide etwas mehrdeutig, besonders jetzt, wo ich beide ~ 1000 Mal gelesen habe. Ein anderer Weg wäre zu schreiben: "0x7B = 123d" oder so ähnlich. Die Mehrdeutigkeit könnte Leute vermasseln, die sich mit alternativen Zahlensystemen nicht auskennen.
Kevin Sliech
@ KevinSliech, danke. Ich habe die Aussage klarer gemacht.
Vacawama
1
In Swift4 müssen Sie "% 02X" anstelle von "% 2X" verwenden, wenn Sie bei Bedarf "0" führen möchten ("% 2X" ein Leerzeichen einfügen)
Bubu
53
In Swift gibt es genau dafür eine spezielle initMethode String:
let hex =String(0xF, radix:16, uppercase:false)
println("hex=\(hex)")//Output: f
let number = UInt("0xF".stringByReplacingOccurrencesOfString("0x", withString:""), radix: 16), numberwird vom Typ sein UInt?Wenn Sie mehr brauchen, stellen Sie eine Frage :)
init<T>(_ value: T, radix:Int=10, uppercase:Bool=false)where T :BinaryInteger
Erstellt eine Zeichenfolge, die den angegebenen Wert in Basis 10 oder einer anderen angegebenen Basis darstellt.
Der folgende Spielplatzcode zeigt, wie Sie eine StringInstanz erstellen , die einen ganzzahligen Wert im Hexadezimalformat darstellt, indem Sie init(_:radix:uppercase:)und ohne Import verwenden Foundation:
Foundationbietet Stringeinen init(format:_:)Initialisierer. init(format:_:)hat die folgende Erklärung:
init(format:String,_ arguments:CVarArg...)
Gibt ein StringObjekt zurück, das mithilfe einer bestimmten Formatzeichenfolge als Vorlage initialisiert wurde, in die die verbleibenden Argumentwerte eingesetzt werden.
Das Apple String Programming Guide enthält eine Liste der Formatbezeichner, die von Stringund unterstützt werden NSString. Unter diesen Formatspezifizierern %Xhat die folgende Beschreibung :
Vorzeichenlose 32-Bit-Ganzzahl ( unsigned int), hexadezimal gedruckt mit den Ziffern 0–9 und Großbuchstaben A - F.
Der folgende Spielplatzcode zeigt, wie Sie eine StringInstanz erstellen , die einen ganzzahligen Wert im Hexadezimalformat darstellt, mit init(format:_:):
Foundationbietet Stringeinen init(format:arguments:)Initialisierer. init(format:arguments:)hat die folgende Erklärung:
init(format:String, arguments:[CVarArg])
Gibt ein StringObjekt zurück, das mithilfe einer bestimmten Formatzeichenfolge als Vorlage initialisiert wurde, in die die verbleibenden Argumentwerte gemäß dem Standardgebietsschema des Benutzers eingesetzt werden.
Der folgende Spielplatzcode zeigt, wie Sie eine StringInstanz erstellen , die einen ganzzahligen Wert im Hexadezimalformat darstellt, mit init(format:arguments:):
Die obigen Antworten funktionieren gut für Werte im Bereich eines 32-Bit-Int, aber Werte darüber funktionieren nicht, da der Wert verlängert wird.
Sie müssen den Längenmodifikator für Werte verwenden, die größer als ein 32-Bit-Int sind
% x = 32-Bit-Ganzzahl ohne Vorzeichen (int ohne Vorzeichen)
ll = Längenmodifikatoren, die angeben, dass ein nachfolgender Konvertierungsspezifizierer für d, o, u, x oder X für ein langes langes oder vorzeichenloses langes langes Argument gilt.
let hexString =String(format:"%llX", decimalValue)
String s = "0x" + String(n, radix: 16)
Antworten:
Sie können jetzt tun:
Hinweis: In
2
diesem Beispiel ist die Feldbreite angegeben und stellt die gewünschte Mindestlänge dar . Das0
weist es an, das Ergebnis bei0
Bedarf mit führenden zu füllen . (Ohne das0
würde das Ergebnis mit führenden Leerzeichen aufgefüllt). Wenn das Ergebnis größer als zwei Zeichen ist, wird die Feldlänge natürlich nicht auf eine Breite von2
; Es wird auf die Länge erweitert, die zur Anzeige des vollständigen Ergebnisses erforderlich ist.Dies funktioniert nur, wenn Sie
Foundation
importiert haben (dies schließt den Import vonCocoa
oder einUIKit
). Dies ist kein Problem, wenn Sie iOS- oder MacOS- Programme ausführen .Verwenden Sie Großbuchstaben,
X
wenn Sie möchten,A...F
und Kleinbuchstaben,x
wenn Sie möchtena...f
:Wenn Sie ganzzahlige Werte größer als drucken möchten
UInt32.max
, fügen Sie der Formatzeichenfolgell
( el-el , nicht elf ) hinzu:Ursprüngliche Antwort
Sie können dies weiterhin verwenden
NSString
. Das Format ist:Das macht
st
einNSString
, also dann+=
funktionieren Dinge wie nicht. Wenn Sie in der Lage sein möchten, die Zeichenfolge mit+=
makest
in aString
like wie folgt anzuhängen :oder
oder
Dann können Sie tun:
quelle
In Swift gibt es genau dafür eine spezielle
init
MethodeString
:quelle
"0xF"
um einUInt
?let number = UInt("0xF".stringByReplacingOccurrencesOfString("0x", withString:""), radix: 16)
,number
wird vom Typ seinUInt?
Wenn Sie mehr brauchen, stellen Sie eine Frage :)String(0xf, radix: 0x10, uppercase: false)
Mit Swift 5 können Sie je nach Bedarf eine der drei folgenden Methoden auswählen, um Ihr Problem zu lösen.
# 1. Verwenden
String
desinit(_:radix:uppercase:)
InitialisierersSwift
String
hat eineninit(_:radix:uppercase:)
Initialisierer mit der folgenden Deklaration:Der folgende Spielplatzcode zeigt, wie Sie eine
String
Instanz erstellen , die einen ganzzahligen Wert im Hexadezimalformat darstellt, indem Sieinit(_:radix:uppercase:)
und ohne Import verwendenFoundation
:# 2. Verwenden
String
desinit(format:_:)
InitialisierersFoundation
bietetString
eineninit(format:_:)
Initialisierer.init(format:_:)
hat die folgende Erklärung:Das Apple String Programming Guide enthält eine Liste der Formatbezeichner, die von
String
und unterstützt werdenNSString
. Unter diesen Formatspezifizierern%X
hat die folgende Beschreibung :Der folgende Spielplatzcode zeigt, wie Sie eine
String
Instanz erstellen , die einen ganzzahligen Wert im Hexadezimalformat darstellt, mitinit(format:_:)
:#3. Verwenden
String
desinit(format:arguments:)
InitialisierersFoundation
bietetString
eineninit(format:arguments:)
Initialisierer.init(format:arguments:)
hat die folgende Erklärung:Der folgende Spielplatzcode zeigt, wie Sie eine
String
Instanz erstellen , die einen ganzzahligen Wert im Hexadezimalformat darstellt, mitinit(format:arguments:)
:quelle
Benutzen
In Swift3 ist keine Importgrundlage erforderlich, zumindest nicht in einem Projekt. String sollte alle Funktionen als NSString haben.
quelle
Die obigen Antworten funktionieren gut für Werte im Bereich eines 32-Bit-Int, aber Werte darüber funktionieren nicht, da der Wert verlängert wird.
Sie müssen den Längenmodifikator für Werte verwenden, die größer als ein 32-Bit-Int sind
% x = 32-Bit-Ganzzahl ohne Vorzeichen (int ohne Vorzeichen)
ll = Längenmodifikatoren, die angeben, dass ein nachfolgender Konvertierungsspezifizierer für d, o, u, x oder X für ein langes langes oder vorzeichenloses langes langes Argument gilt.
quelle
Int("hexaString", radix: 16)
Swift 5.2.4
quelle