स्विफ्ट में इंट को हेक्स स्ट्रिंग में कैसे बदलें


85

ओब्ज-सी में मैं एक अहस्ताक्षरित पूर्णांक n को एक हेक्स स्ट्रिंग के साथ परिवर्तित करता था

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

मैंने इसे स्विफ्ट भाषा में अनुवाद करने के लिए लंबे समय तक कोशिश की, लेकिन असफल रूप से।


द्वारा जवाब के आधार पर stackoverflow.com/users/1187415/martin-r यहाँ stackoverflow.com/questions/24986319/... , आप कर सकते हैंString s = "0x" + String(n, radix: 16)
झाओ

जवाबों:


138

अब आप कर सकते हैं:

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"

हेक्स और दशमलव संख्या "7 बी 123 में हेक्स" में उलट है, इसलिए सेंट अभिव्यक्ति को सही किया जाना चाहिए: सेंट = "(एन)" + स्ट्रिंग (प्रारूप: "% 2X", एन) + "हेक्स में +
केविन स्लीच

@ केविनस्लीच, मैं मानता हूँ कि यह अस्पष्ट है। मेरा मतलब था कि जैसे कोई ऊपर आए और पूछा, "7B क्या दर्शाता है?", और आप जवाब देंगे "7B हेक्साडेसिमल में लिखा संख्या 123 है"।
टीकामा

मुझे लगता है कि दोनों थोड़ा अस्पष्ट हैं, खासकर अब जब मैंने दोनों ~ 1000 बार पढ़ा है। एक और तरीका लिखना होगा: "0x7B = 123d" या ऐसा ही कुछ। अस्पष्टता लोगों को अलग-अलग संख्या प्रणालियों में अच्छी तरह से वाकिफ नहीं कर सकती है।
केविन स्लीच

@KevinSliech, धन्यवाद। मैंने बयान को स्पष्ट किया।
टीकामा

1
Swift4 में आपको "% 2X" के बजाय "% 02X" का उपयोग करना चाहिए यदि आप "0" को प्रमुख बनाना चाहते हैं यदि आवश्यक हो ("% 2X" एक स्थान डालें)
Bubu

54

स्विफ्ट में इसके लिए एक विशिष्ट initविधि है String:

let hex = String(0xF, radix: 16, uppercase: false)
println("hex=\(hex)") // Output: f

1
मैं इस स्ट्रिंग को UInt में कैसे बदल सकता हूं?
टॉमस्वायर

3
आप "0xF"एक में बदलना चाहते हैं UInt?
रिच

1
let number = UInt("0xF".stringByReplacingOccurrencesOfString("0x", withString:""), radix: 16), numberप्रकार का UInt?होगा यदि आपको अधिक प्रश्न पूछने की आवश्यकता है :)
अमीर

mayhap:String(0xf, radix: 0x10, uppercase: false)
माजिद

@ क्या हमारे पास उद्देश्य सी में NSString के लिए यह मूलांक विधि है?
नरेश नल्लमसेट्टी

39

अपनी आवश्यकताओं के अनुसार स्विफ्ट 5 के साथ, आप अपनी समस्या को हल करने के लिए निम्नलिखित तीन तरीकों में से एक चुन सकते हैं।


# 1। का उपयोग करते हुए 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"

# 2। का उपयोग करते हुए 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"

# 3। का उपयोग करते हुए 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"

2

काम में लाना

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

Swift3 में आयात नींव की आवश्यकता नहीं है, कम से कम एक परियोजना में नहीं। स्ट्रिंग में NSString के रूप में सभी कार्यक्षमता होनी चाहिए।


1

ऊपर दिए गए उत्तर 32 बिट इंट की श्रेणी में मानों के लिए ठीक काम करते हैं, लेकिन इस पर मान काम नहीं करेगा क्योंकि मान लुढ़क जाएगा।

आपको 32 बिट इंट से अधिक मान के लिए लंबाई संशोधक का उपयोग करने की आवश्यकता है

% x = असूचीबद्ध 32-बिट पूर्णांक (अहस्ताक्षरित int)

ll = लंबाई संशोधक यह निर्दिष्ट करता है कि निम्नलिखित डी, ओ, यू, एक्स, या एक्स रूपांतरण विनिर्देश एक लंबे लंबे या अहस्ताक्षरित लंबे लंबे तर्क पर लागू होते हैं।

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

कृपया हेक्स को दशमलव में भी बदलने के लिए कोड जोड़ें।
वरुण नहरिया

@ वरुण नैहरियाInt("hexaString", radix: 16)
लियो डबस

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.