ios - data - uicolor to hex




Wie konvertiert man einen Int in Hex String in Swift (4)

In Obj-C habe ich eine vorzeichenlose Ganzzahl n in eine hexadezimale Zeichenfolge mit umgewandelt

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

Ich habe lange versucht, dies in Swift-Sprache zu übersetzen, aber erfolglos.


In Swift gibt es eine spezifische init Methode für String genau für diese:

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

Sie können jetzt tun:

let n = 123
var st = String(format:"%2X", n)
st += " is the hexadecimal representation of \(n)"
// "7B is the hexadecimal representation of 123"

Dies funktioniert nur, wenn Sie Foundation importiert haben (dies beinhaltet den Import von Cocoa oder UIKit ). Dies ist kein Problem, wenn Sie iOS oder OS X programmieren.

Verwenden Sie Großbuchstaben X wenn Sie A...F und Kleinbuchstaben x wenn Sie a...f :

String(format: "%x %X", 64206, 64206)  // "face FACE"

Ursprüngliche Antwort

Sie können weiterhin NSString dazu verwenden. Das Format ist:

var st = NSString(format:"%2X", n)

Das macht st ein NSString , also NSString Dinge wie += nicht. Wenn Sie in der Lage sein möchten, mit += an die Zeichenkette anzuhängen, machen Sie st wie st in eine String :

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"

Mit Swift 3 können Sie je nach Ihren Bedürfnissen eine der drei folgenden Methoden wählen, um Ihr Problem zu lösen.

# 1. Verwenden des Initializers " init(_:radix:uppercase:) String

Swift String hat einen Initialisierungsinitiator init(_:radix:uppercase:) mit der folgenden Deklaration:

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

Erstellt eine Zeichenfolge, die den angegebenen Wert in der Basis 10 oder einer anderen angegebenen Basis darstellt.

Der folgende Playground-Code zeigt, wie Sie eine String Instanz erstellen, die einen Ganzzahlwert im Hexadezimalformat darstellt, indem Sie init(_:radix:uppercase:) und Foundation importieren müssen:

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. Verwenden des init(format:​_:​) Initialisierers von String

Foundation stellt String einen Initialisierungsinitiator init(format:​_:​) :) zur Verfügung. init(format:​_:​) hat folgende Deklaration:

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

Gibt ein String Objekt zurück, das mit einer gegebenen Formatzeichenfolge als Vorlage initialisiert wurde, in die die restlichen Argumentwerte eingefügt werden.

Das String-Programmierhandbuch von Apple enthält eine Liste der NSString , die von String und NSString . Unter diesen Formatbezeichnern hat %X die folgende Beschreibung :

unsigned int 32-Bit-Ganzzahl ( unsigned int ), hexadezimal gedruckt mit den Ziffern 0-9 und Großbuchstaben A-F.

Der folgende Playground-Code zeigt, wie eine String Instanz erstellt wird, die einen Integer-Wert im Hexadezimalformat 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"

#3. Verwenden des init(format:​arguments:​) :) - Initialisierers von String

Foundation stellt String einen init(format:​arguments:​) :) Initialisierer zur Verfügung. init(format:​arguments:​) hat die folgende Deklaration:

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

Gibt ein String Objekt zurück, das mit einer bestimmten Formatzeichenfolge als Vorlage initialisiert wurde und in der die übrigen Argumentwerte entsprechend dem Standardgebietsschema des Benutzers ersetzt werden.

Der Playground-Code unten zeigt, wie eine String Instanz erstellt wird, die einen Integer-Wert im Hexadezimalformat 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 überläuft.

Sie müssen den Längenmodifikator für Werte verwenden, die größer als 32 Bit Int sind

% x = Vorzeichenlose 32-Bit-Ganzzahl (unsigned int)

ll = Längenmodifikatoren, die angeben, dass ein nachfolgender d, o, u, x oder X Konvertierungsspezifizierer auf ein langes langes oder vorzeichenloses long long Argument angewendet wird.

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




swift