Obj-C'de işaretsiz bir n tamsayısını onaltılık bir dizgeye dönüştürürdüm
NSString *st = [NSString stringWithFormat:@"%2X", n];
Uzun süre bunu Swift diline çevirmeye çalıştım, ancak başarısız oldu.
Yanıtlar:
Şimdi yapabilirsiniz:
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
Not: 2Bu örnekteki alan genişliğidir ve istenen minimum uzunluğu temsil eder . 0Ped giden ve sonucu söyler 0'ın gerekirse. (Bu olmadan, 0sonuç baştaki boşluklarla doldurulur). Elbette, sonuç iki karakterden büyükse, alan uzunluğu şu genişliğe kırpılmayacaktır 2; tam sonucu görüntülemek için gerekli olan uzunlukta genişleyecektir.
Bu, yalnızca Foundationiçe aktarmanız durumunda çalışır (buna Cocoaveya içeriğinin içe aktarılması dahildir UIKit). Yaptığınızı, bu bir sorun değildir iOS veya MacOS programlama.
İsterseniz büyük harf X, isterseniz A...Fküçük harf xkullanın a...f:
String(format: "%x %X", 64206, 64206) // "face FACE"
Daha büyük tamsayı değerleri yazdırmak istiyorsanız , biçim dizesine ( el-el , on bir değil ) UInt32.maxekleyin :ll
let n = UInt64.max
print(String(format: "%llX is hexadecimal for \(n)", n))
FFFFFFFFFFFFFFFF is hexadecimal for 18446744073709551615
Orijinal Cevap
Bunu NSStringyapmak için hala kullanabilirsiniz . Biçim şu şekildedir:
var st = NSString(format:"%2X", n)
Bu kılan stbir NSStringo kadar sonra işler gibi, +=yaptığınız işi değil. Eğer +=make ile dizgeye böyle stbir ekleme yapabilmek istiyorsanız String:
var st = NSString(format:"%2X", n) as String
veya
var st = String(NSString(format:"%2X", n))
veya
var st: String = NSString(format:"%2X", n)
O zaman şunları yapabilirsiniz:
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"
Swift'de tam olarak bunun için özel bir inityöntem var String:
let hex = String(0xF, radix: 16, uppercase: false)
println("hex=\(hex)") // Output: f
"0xF"a dönüştürmek ister misin UInt?
let number = UInt("0xF".stringByReplacingOccurrencesOfString("0x", withString:""), radix: 16), numbertipte olacak UInt?Daha fazlasına ihtiyacınız varsa bir soru sorun :)
String(0xf, radix: 0x10, uppercase: false)
Swift 5 ile ihtiyacınıza göre probleminizi çözmek için aşağıdaki üç yöntemden birini seçebilirsiniz.
String'Nin init(_:radix:uppercase:)başlatıcısını kullanma Swift String, init(_:radix:uppercase:)aşağıdaki beyana sahip bir başlatıcıya sahiptir:
init<T>(_ value: T, radix: Int = 10, uppercase: Bool = false) where T : BinaryInteger
10 tabanında veya belirtilen başka bir temelde verilen değeri temsil eden bir dize oluşturur.
Aşağıdaki Oyun Alanı kodu String, kullanarak init(_:radix:uppercase:)ve içe aktarmak zorunda kalmadan onaltılık biçimde bir tamsayı değerini temsil eden bir örneğin nasıl oluşturulacağını gösterir 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'Nin init(format:_:)başlatıcısını kullanmaFoundationsağlayan Stringbir init(format:_:)başlatıcı. init(format:_:)aşağıdaki beyana sahiptir:
init(format: String, _ arguments: CVarArg...)
StringKalan bağımsız değişken değerlerinin yerine konulduğu bir şablon olarak belirli bir biçim dizesi kullanılarak başlatılan bir nesneyi döndürür .
Apple'ın Dize Programlama Kılavuzu , Stringve tarafından desteklenen biçim belirleyicilerinin bir listesini verir NSString. Bu biçim belirleyicileri arasında %Xaşağıdaki açıklama bulunur :
unsigned int0–9 rakamları ve A – F büyük harfleri kullanılarak onaltılık olarak yazdırılan işaretsiz 32 bit tam sayı ( ).
Aşağıdaki Playground kodu, aşağıdakilerle Stringonaltılık biçimde bir tamsayı değerini temsil eden bir örneğin nasıl oluşturulacağını gösterir 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'Nin init(format:arguments:)başlatıcısını kullanmaFoundationsağlayan Stringbir init(format:arguments:)başlatıcı. init(format:arguments:)aşağıdaki beyana sahiptir:
init(format: String, arguments: [CVarArg])
StringKalan bağımsız değişken değerlerinin kullanıcının varsayılan yerel ayarına göre değiştirildiği bir şablon olarak belirli bir biçim dizesi kullanılarak başlatılan bir nesneyi döndürür .
Aşağıdaki Playground kodu, aşağıdakilerle Stringonaltılık biçimde bir tamsayı değerini temsil eden bir örneğin nasıl oluşturulacağını gösterir 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"
Yukarıdaki yanıtlar, 32 bitlik bir Int aralığındaki değerler için iyi çalışır, ancak bunun üzerindeki değerler, değer devredileceğinden çalışmaz.
32bit Int'den büyük değerler için uzunluk değiştiriciyi kullanmanız gerekir
% x = İşaretsiz 32 bit tam sayı (işaretsiz tamsayı)
ll = Aşağıdaki d, o, u, x veya X dönüşüm belirtecinin uzun uzun veya işaretsiz uzun uzun bir bağımsız değişken için geçerli olduğunu belirten uzunluk değiştiriciler.
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)