ओब्ज-सी में मैं एक अहस्ताक्षरित पूर्णांक 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:_:)प्रारंभकर्ताFoundationStringएक 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:)प्रारंभकर्ताFoundationStringएक 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)