[ios] Swift에서 Int를 Hex String으로 변환하는 방법
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"
보다 큰 정수 값을 인쇄 하려면 형식 문자열 UInt32.max
에 ll
( el-el , not eleven )을 추가하십시오.
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
그럼 일이 좋아, +=
할 일을하지. 당신이 가진 문자열에 추가 할 수있게하려면 +=
메이크업 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
답변
Swift 5를 사용하면 필요에 따라 문제를 해결하기 위해 다음 세 가지 방법 중 하나를 선택할 수 있습니다.
#1. 사용 String
의 init(_:radix:uppercase:)
이니셜 라이저
Swift String
에는 init(_:radix:uppercase:)
다음 선언 이있는 이니셜 라이저가 있습니다.
init<T>(_ value: T, radix: Int = 10, uppercase: Bool = false) where T : BinaryInteger
10 진법 또는 다른 지정된 기수로 주어진 값을 나타내는 문자열을 만듭니다.
아래의 플레이 그라운드 코드는 가져 오기를 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"
# 2. 사용 String
의 init(format:_:)
이니셜 라이저
Foundation
이니셜 라이저를 제공 String
합니다 init(format:_:)
. init(format:_:)
다음과 같은 선언이 있습니다.
init(format: String, _ arguments: CVarArg...)
String
주어진 형식 문자열을 템플릿으로 사용하여 초기화 된 개체를 반환 하고 나머지 인수 값을 대체합니다.
Apple의 String Programming Guide 는 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"
답변
쓰다
let string2 = String(format:"%02X", 1)
print(string2) // prints: "01"
Swift3에서는 최소한 프로젝트에서는 필요하지 않습니다. String은 모든 기능을 NSString으로 가져야합니다.
답변
위의 답변은 32 비트 Int 범위의 값에 대해 잘 작동하지만이 값을 초과하는 값은 값이 롤오버되므로 작동하지 않습니다.
32 비트 Int보다 큰 값 에는 길이 수정자를 사용해야합니다.
% x = 부호없는 32 비트 정수 (부호없는 정수)
ll = 다음 d, o, u, x 또는 X 변환 지정자가 long long 또는 unsigned long long 인수에 적용되도록 지정하는 길이 수정 자입니다.
let hexString = String(format:"%llX", decimalValue)
답변
스위프트 5.2.4
let value = 200
let hexString = String(format: "%02X", value)