In Obj-C habe ich eine vorzeichenlose Ganzzahl n in eine Hex-Zeichenfolge mit konvertiert
NSString *st = [NSString stringWithFormat:@"%2X", n];
Ich habe lange versucht, dies in die Swift-Sprache zu übersetzen, aber erfolglos.
Antworten:
Sie können jetzt tun:
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
Hinweis: In 2
diesem Beispiel ist die Feldbreite angegeben und stellt die gewünschte Mindestlänge dar . Das 0
weist es an, das Ergebnis bei 0
Bedarf mit führenden zu füllen . (Ohne das 0
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 von 2
; 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 von Cocoa
oder ein UIKit
). 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ö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 for 18446744073709551615
Ursprüngliche Antwort
Sie können dies weiterhin verwenden NSString
. Das Format ist:
var st = NSString(format:"%2X", n)
Das macht st
ein NSString
, also dann +=
funktionieren Dinge wie nicht. Wenn Sie in der Lage sein möchten, die Zeichenfolge mit +=
make st
in a String
like wie folgt anzuhängen :
var st = NSString(format:"%2X", n) as String
oder
var st = String(NSString(format:"%2X", n))
oder
var st: String = NSString(format:"%2X", n)
Dann können Sie tun:
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 gibt es genau dafür eine spezielle init
Methode String
:
let hex = String(0xF, radix: 16, uppercase: false)
println("hex=\(hex)") // Output: f
"0xF"
um ein UInt
?
let number = UInt("0xF".stringByReplacingOccurrencesOfString("0x", withString:""), radix: 16)
, number
wird vom Typ sein UInt?
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.
String
des init(_:radix:uppercase:)
InitialisierersSwift String
hat einen init(_:radix:uppercase:)
Initialisierer mit der folgenden Deklaration:
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 String
Instanz erstellen , die einen ganzzahligen Wert im Hexadezimalformat darstellt, indem Sie init(_:radix:uppercase:)
und ohne Import verwenden 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
des init(format:_:)
InitialisierersFoundation
bietet String
einen init(format:_:)
Initialisierer. init(format:_:)
hat die folgende Erklärung:
init(format: String, _ arguments: CVarArg...)
Gibt ein
String
Objekt 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 String
und unterstützt werden NSString
. Unter diesen Formatspezifizierern %X
hat 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 String
Instanz erstellen , die einen ganzzahligen Wert im Hexadezimalformat darstellt, mit 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
des init(format:arguments:)
InitialisierersFoundation
bietet String
einen init(format:arguments:)
Initialisierer. init(format:arguments:)
hat die folgende Erklärung:
init(format: String, arguments: [CVarArg])
Gibt ein
String
Objekt 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 String
Instanz erstellen , die einen ganzzahligen Wert im Hexadezimalformat darstellt, mit 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"
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)
Int("hexaString", radix: 16)
Swift 5.2.4
let value = 200
let hexString = String(format: "%02X", value)
String s = "0x" + String(n, radix: 16)