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 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 for 18446744073709551615
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) 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 initMethode 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), numberwird 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.
Stringdes init(_:radix:uppercase:)InitialisierersSwift Stringhat 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 StringInstanz 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"
Stringdes init(format:_:)InitialisierersFoundationbietet 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:_:):
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"
Stringdes init(format:arguments:)InitialisierersFoundationbietet 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:):
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)