Obj-Cでは、符号なし整数nを16進文字列に変換するために使用しました。
NSString *st = [NSString stringWithFormat:@"%2X", n];
私はこれをSwift言語に翻訳しようと長い間試みましたが、失敗しました。
回答:
これで、次のことができます。
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
注:2
この例のはフィールド幅であり、必要な最小の長さを表します。0
パッドにつながるとの結果にそれを伝える0
の必要に応じて。(がない0
と、結果は先頭のスペースで埋められます)。もちろん、結果が2文字より大きい場合、フィールドの長さは次の幅にクリップされません。2
;の。完全な結果を表示するために必要な長さに拡張されます。
これFoundation
は、インポートした場合にのみ機能します(これには、Cocoa
またはのインポートが含まれますUIKit
)。iOSまたはmacOSプログラミングを行っている場合、これは問題ではありません。
大文字使用X
したい場合はA...F
、小文字x
したい場合はa...f
:
String(format: "%x %X", 64206, 64206) // "face FACE"
より大きい整数値を出力する場合は、フォーマット文字列に(el-el、11ではなく)をUInt32.max
追加します。ll
let n = UInt64.max
print(String(format: "%llX is hexadecimal for \(n)", n))
FFFFFFFFFFFFFFFF is hexadecimal for 18446744073709551615
元の回答
あなたはまだこれをするNSString
ために使うことができます。形式は次のとおりです。
var st = NSString(format:"%2X", n)
これによりst
、が作成されるNSString
ため、のようなものは機能+=
しません。+=
makeを使用して文字列に追加できるようにする場合はst
、次のString
ようにします。
var st = NSString(format:"%2X", n) as String
または
var st = String(NSString(format:"%2X", n))
または
var st: String = NSString(format:"%2X", n)
次に、次のことができます。
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には、まさにこれのための特定のinit
方法がありString
ます。
let hex = String(0xF, radix: 16, uppercase: false)
println("hex=\(hex)") // Output: f
"0xF"
したいUInt
ですか?
let number = UInt("0xF".stringByReplacingOccurrencesOfString("0x", withString:""), radix: 16)
、number
タイプになりUInt?
ますさらに質問が必要な場合:)
String(0xf, radix: 0x10, uppercase: false)
Swift 5では、必要に応じて、問題を解決するために次の3つの方法のいずれかを選択できます。
String
のinit(_:radix:uppercase:)
初期化子を使用 するSwiftにString
はinit(_:radix:uppercase:)
、次の宣言を持つ初期化子があります。
init<T>(_ value: T, radix: Int = 10, uppercase: Bool = false) where T : BinaryInteger
基数10またはその他の指定された基数で指定された値を表す文字列を作成します。
以下のPlaygroundコードは、以下をString
使用init(_:radix:uppercase:)
してインポートせずに、16進形式で整数値を表すインスタンスを作成する方法を示しています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
のinit(format:_:)
初期化子を使用するFoundation
初期化子を提供String
しinit(format:_:)
ます。init(format:_:)
次の宣言があります。
init(format: String, _ arguments: CVarArg...)
String
指定されたフォーマット文字列をテンプレートとして使用して初期化されたオブジェクトを返し、残りの引数値が代入されます。
Appleの文字列プログラミングガイドには、String
およびでサポートされている形式指定子のリストが記載されていNSString
ます。それらのフォーマット指定子の中で%X
、次の説明があります。
符号なし32ビット整数(
unsigned int
)。0〜9の数字と大文字のA〜Fを使用して16進数で出力されます。
以下のPlaygroundコードString
は、整数値を16進形式で表すインスタンスを次のように作成する方法を示しています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
のinit(format:arguments:)
初期化子を使用するFoundation
初期化子を提供String
しinit(format:arguments:)
ます。init(format:arguments:)
次の宣言があります。
init(format: String, arguments: [CVarArg])
String
指定されたフォーマット文字列をテンプレートとして使用して初期化されたオブジェクトを返します。このテンプレートには、ユーザーのデフォルトロケールに従って残りの引数値が代入されます。
以下のPlaygroundコードString
は、整数値を16進形式で表すインスタンスを次のように作成する方法を示しています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"
上記の回答は、32ビットIntの範囲の値に対しては正常に機能しますが、値がロールオーバーするため、これを超える値は機能しません。
32ビット整数より大きい値には長さ修飾子を使用する必要があります
%x =符号なし32ビット整数(unsigned int)
ll =次のd、o、u、x、またはX変換指定子がlonglongまたはunsignedlonglong引数に適用されることを指定する長さ修飾子。
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)