source

Swift에서 Int를 16진수 문자열로 변환하는 방법

manycodes 2023. 8. 29. 20:44
반응형

Swift에서 Int를 16진수 문자열로 변환하는 방법

Obj-C에서 부호 없는 정수 n을 다음과 같은 16진수 문자열로 변환하는 데 사용됩니다.

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

저는 이것을 스위프트 언어로 번역하기 위해 오랫동안 노력했지만 실패했습니다.

이제 다음을 수행할 수 있습니다.

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

참고: The2이 예에서는 필드 너비이며 원하는 최소 길이를 나타냅니다.0리드로 결과를 기록하도록 지시합니다.0필요한 경우입니다. (필요하지 않은 경우.0결과는 선행 공백으로 채워집니다.)물론 결과가 두 문자보다 클 경우 필드 길이가 다음 너비로 잘리지 않습니다.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, 11이 아닌) 형식 문자열:

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. 사용하기Stringinit(_:radix:uppercase:)이니셜라이저

스위프트String에는 다음 선언을 가진 이니셜라이저가 있습니다.

init<T>(_ value: T, radix: Int = 10, uppercase: Bool = false) where T : BinaryInteger

기준 10 또는 다른 지정된 기준에서 지정된 값을 나타내는 문자열을 만듭니다.

아래의 Playground 코드는 다음을 만드는 방법을 보여줍니다.String다음을 사용하여 16진수 형식으로 정수 값을 나타내는 인스턴스init(_:radix:uppercase:)그리고 수입할 필요 없이.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. 사용하기Stringinit(format:​_:​)이니셜라이저

Foundation제공합니다.String이니셜라이저init(format:​_:​)에는 다음과 같은 선언이 있습니다.

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

를 반환합니다.String나머지 인수 값이 대체되는 템플릿으로 지정된 형식 문자열을 사용하여 초기화된 개체입니다.

Apple의 String Programming Guide는 지원되는 형식 지정자 목록을 제공합니다.String그리고.NSString형식 지정자 중에서%X설명은 다음과 같습니다.

없는 정수부호비없 32트정수는정(수▁(▁uns트부비-▁32igned▁32unsigned int됩니다.

는 아의래코다만음방보드다여니줍법을는드을는을 .String입니다.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. 사용하기Stringinit(format:​arguments:​)

Foundation에는 을(를) 제공합니다.String이니셜라이저init(format:​arguments:​)에는 다음과 같은 선언이 있습니다.

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

를 반환합니다.String사용자의 기본 로케일에 따라 나머지 인수 값이 대체되는 템플릿으로 지정된 형식 문자열을 사용하여 초기화된 개체입니다.

는 아의래코다만음방보드다여니줍법을는드을는을 .String입니다.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"

스위프트 5.2.4

let value = 200
let hexString = String(format: "%02X", value)

위의 답변은 32비트 Int 범위의 값에 대해서는 정상적으로 작동하지만 값이 롤오버되므로 이 값을 초과하는 값은 작동하지 않습니다.

32비트 Int보다 큰 값에는 길이 한정자를 사용해야 합니다.

%x = 부호 없는 32비트 정수( 부호 없는 int)

ll = 다음 d, o, u, x 또는 X 변환 지정자가 길고 부호 없는 긴 인수에 적용되도록 지정하는 길이 한정자입니다.

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

사용하기

let string2 = String(format:"%02X", 1)
print(string2) // prints: "01"

Swift3에서는 Import Foundation이 필요하지 않습니다. 적어도 프로젝트에서는 그렇지 않습니다.문자열은 NSString과 같은 모든 기능을 가지고 있어야 합니다.

언급URL : https://stackoverflow.com/questions/24229505/how-to-convert-an-int-to-hex-string-in-swift

반응형