ओब्ज-सी में मैं एक अहस्ताक्षरित पूर्णांक n को एक हेक्स स्ट्रिंग के साथ परिवर्तित करता था
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
नोट: 2
इस उदाहरण में फ़ील्ड की चौड़ाई है और वांछित न्यूनतम लंबाई का प्रतिनिधित्व करता है । 0
पैड को यह बताता है प्रमुख के साथ परिणाम 0
की यदि आवश्यक हो तो। ( 0
परिणाम के बिना , परिणाम अग्रणी स्थानों के साथ गद्देदार होगा)। बेशक, यदि परिणाम दो वर्णों से बड़ा है, तो क्षेत्र की लंबाई की चौड़ाई से नहीं जुड़ा होगा 2
; पूर्ण परिणाम प्रदर्शित करने के लिए जो भी लंबाई आवश्यक है, उसका विस्तार होगा।
यह केवल तभी काम करता है जब आपने Foundation
आयात किया हो (इसमें आयात शामिल है Cocoa
या UIKit
)। यदि आप iOS या macOS प्रोग्रामिंग कर रहे हैं तो यह कोई समस्या नहीं है ।
X
यदि आप चाहते हैं तो अपरकेस का उपयोग करें A...F
और x
यदि आप चाहते हैं तो कम करें a...f
:
String(format: "%x %X", 64206, 64206) // "face FACE"
यदि आप पूर्णांक मानों को इससे अधिक प्रिंट करना चाहते हैं , तो प्रारूप स्ट्रिंग में ( el-el , not eleven ) 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
, इसलिए तब +=
काम नहीं करता है। आप के साथ स्ट्रिंग के लिए संलग्न करने के लिए सक्षम होने के लिए चाहते हैं, तो +=
मेकअप 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"
स्विफ्ट में इसके लिए एक विशिष्ट 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)
अपनी आवश्यकताओं के अनुसार स्विफ्ट 5 के साथ, आप अपनी समस्या को हल करने के लिए निम्नलिखित तीन तरीकों में से एक चुन सकते हैं।
String
की init(_:radix:uppercase:)
प्रारंभकर्तास्विफ्ट String
में init(_:radix:uppercase:)
निम्नलिखित घोषणा के साथ एक इनिलाइज़र है:
init<T>(_ value: T, radix: Int = 10, uppercase: Bool = false) where T : BinaryInteger
आधार 10, या कुछ अन्य निर्दिष्ट आधार में दिए गए मान का प्रतिनिधित्व करने वाला एक स्ट्रिंग बनाता है।
नीचे दिए गए खेल का मैदान दिखाता है कि कैसे एक String
उदाहरण बनाया जाए जो 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"
String
की init(format:_:)
प्रारंभकर्ताFoundation
String
एक init(format:_:)
इनिशियलाइज़र प्रदान करता है । init(format:_:)
निम्नलिखित घोषणा है:
init(format: String, _ arguments: CVarArg...)
String
किसी दिए गए प्रारूप स्ट्रिंग का उपयोग करके एक ऑब्जेक्ट को एक टेम्पलेट के रूप में आरम्भ किया जाता है जिसमें शेष तर्क मान प्रतिस्थापित होते हैं।
ऐप्पल के स्ट्रिंग प्रोग्रामिंग गाइड प्रारूप निर्दिष्टकर्ताओं की एक सूची देता है जो इसके द्वारा समर्थित हैं String
और NSString
। उन प्रारूप विनिर्देशकों में, %X
निम्नलिखित विवरण है :
Unsign 32-bit पूर्णांक (
unsigned int
), अंक 0–9 और अपरकेस-ए-एफ का उपयोग करके हेक्साडेसिमल में मुद्रित होता है।
नीचे दिया गया प्लेग्राउंड कोड दिखाता है कि कैसे एक 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"
String
की init(format:arguments:)
प्रारंभकर्ताFoundation
String
एक init(format:arguments:)
इनिशियलाइज़र प्रदान करता है । 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"
ऊपर दिए गए उत्तर 32 बिट इंट की श्रेणी में मानों के लिए ठीक काम करते हैं, लेकिन इस पर मान काम नहीं करेगा क्योंकि मान लुढ़क जाएगा।
आपको 32 बिट इंट से अधिक मान के लिए लंबाई संशोधक का उपयोग करने की आवश्यकता है
% x = असूचीबद्ध 32-बिट पूर्णांक (अहस्ताक्षरित int)
ll = लंबाई संशोधक यह निर्दिष्ट करता है कि निम्नलिखित डी, ओ, यू, एक्स, या एक्स रूपांतरण विनिर्देश एक लंबे लंबे या अहस्ताक्षरित लंबे लंबे तर्क पर लागू होते हैं।
let hexString = String(format:"%llX", decimalValue)
Int("hexaString", radix: 16)
स्विफ्ट 5.2.4
let value = 200
let hexString = String(format: "%02X", value)
String s = "0x" + String(n, radix: 16)