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: 2
Bu örnekteki alan genişliğidir ve istenen minimum uzunluğu temsil eder . 0
Ped giden ve sonucu söyler 0
'ın gerekirse. (Bu olmadan, 0
sonuç 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 Foundation
içe aktarmanız durumunda çalışır (buna Cocoa
veya 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...F
küçük harf x
kullanı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.max
ekleyin :ll
let n = UInt64.max
print(String(format: "%llX is hexadecimal for \(n)", n))
FFFFFFFFFFFFFFFF is hexadecimal for 18446744073709551615
Orijinal Cevap
Bunu NSString
yapmak için hala kullanabilirsiniz . Biçim şu şekildedir:
var st = NSString(format:"%2X", n)
Bu kılan st
bir NSString
o kadar sonra işler gibi, +=
yaptığınız işi değil. Eğer +=
make ile dizgeye böyle st
bir 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 init
yö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)
, number
tipte 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ı kullanmaFoundation
sağlayan String
bir init(format:_:)
başlatıcı. init(format:_:)
aşağıdaki beyana sahiptir:
init(format: String, _ arguments: CVarArg...)
String
Kalan 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 , String
ve tarafından desteklenen biçim belirleyicilerinin bir listesini verir NSString
. Bu biçim belirleyicileri arasında %X
aşağıdaki açıklama bulunur :
unsigned int
0–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 String
onaltı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ı kullanmaFoundation
sağlayan String
bir init(format:arguments:)
başlatıcı. init(format:arguments:)
aşağıdaki beyana sahiptir:
init(format: String, arguments: [CVarArg])
String
Kalan 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 String
onaltı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)