swift - स्विफ्ट में एक एकल अक्षर स्ट्रिंग से ASCII मान में परिवर्तित करने का सबसे सरल तरीका क्या है?



string character (10)

5 स्विफ्ट के साथ, आप किसी वर्ण के ASCII संख्यात्मक प्रतिनिधित्व को प्राप्त करने के लिए निम्नलिखित में से एक दृष्टिकोण चुन सकते हैं।

# 1। Character की asciiValue संपत्ति का उपयोग करना

Character में एक संपत्ति है, जिसे asciiValue कहा जाता है। asciiValue में निम्नलिखित घोषणा है:

var asciiValue: UInt8? { get }

इस वर्ण का ASCII एन्कोडिंग मान, यदि यह ASCII वर्ण है।

निम्न प्लेग्राउंड नमूना कोड दिखाता है कि किसी वर्ण के ASCII एन्कोडिंग मान प्राप्त करने के लिए asciiValue का उपयोग कैसे करें:

let character: Character = "a"
print(character.asciiValue) //prints: Optional(97)
let string = "a"
print(string.first?.asciiValue) //prints: Optional(97)
let character: Character = "👍"
print(character.asciiValue) //prints: nil

# 2। Character की isASCII संपत्ति और Unicode.Scalar का उपयोग करना

एक विकल्प के रूप में, आप जांच सकते हैं कि एक स्ट्रिंग का पहला वर्ण एक ASCII वर्ण है (अक्षर का isASCII गुण का उपयोग करके) फिर इसके पहले यूनिकोड स्केलर ( Unicode.Scalar की value संपत्ति का उपयोग करके) का संख्यात्मक प्रतिनिधित्व प्राप्त करें। नीचे दिए गए खेल के नमूने का कोड आगे बढ़ना है:

let character: Character = "a"
if character.isASCII, let scalar = character.unicodeScalars.first {
    print(scalar.value)
} else {
    print("Not an ASCII character")
}
/*
 prints: 97
 */
let string = "a"
if let character = string.first, character.isASCII, let scalar = character.unicodeScalars.first {
    print(scalar.value)
} else {
    print("Not an ASCII character")
}
/*
 prints: 97
 */
let character: Character = "👍"
if character.isASCII, let scalar = character.unicodeScalars.first {
    print(scalar.value)
} else {
    print("Not an ASCII character")
}
/*
 prints: Not an ASCII character
 */

मैं बस स्विफ्ट में एक एकल चार स्ट्रिंग का ASCII मूल्य प्राप्त करना चाहता हूं। यह मैं वर्तमान में कैसे कर रहा हूँ:

var singleChar = "a"
println(singleChar.unicodeScalars[singleChar.unicodeScalars.startIndex].value) //prints: 97

हालांकि यह बहुत बदसूरत है। एक सरल तरीका होना चाहिए।


UInt8 पर UInt8 (ascii: Unicode.Scalar) इनिशियलाइज़र भी है।

var singleChar = "a"
UInt8(ascii: singleChar.unicodeScalars[singleChar.startIndex])

इसे पूरा करने के लिए आप NSString के characterAtIndex का उपयोग कर सकते हैं ...

var singleCharString = "a" as NSString
var singleCharValue = singleCharString.characterAtIndex(0)
println("The value of \(singleCharString) is \(singleCharValue)")  // The value of a is 97

जिस तरह से आप कर रहे हैं वह सही है। यदि आपको अनुक्रमण की क्रिया पसंद नहीं है, तो आप यूनिकोड स्केलर के माध्यम से साइकिल चलाकर इससे बच सकते हैं:

var x : UInt32 = 0
let char = "a"
for sc in char.unicodeScalars {x = sc.value; break}

आप वास्तव में इस मामले में break को छोड़ सकते हैं, ज़ाहिर है, क्योंकि केवल एक यूनिकोड स्केलर है।

या, एक ऐरे में कनवर्ट करें और इंट इंडेक्सिंग (हताश ​​का अंतिम उपाय) का उपयोग करें:

let char = "a"
let x = Array(char.unicodeScalars)[0].value

यहां मेरा कार्यान्वयन है, यह ASCII मूल्यों की एक सरणी देता है।

extension String {

    func asciiValueOfString() -> [UInt32] {

      var retVal = [UInt32]()
      for val in self.unicodeScalars where val.isASCII() {
          retVal.append(UInt32(val))
      }
      return retVal
    }
}

नोट: हाँ यह स्विफ्ट 2 संगत है।


स्विफ्ट 4+

ASCII के लिए चार

let charVal = String(ch).unicodeScalars
var asciiVal = charVal[charVal.startIndex].value

ASCII से चार

let char = Character(UnicodeScalar(asciiVal)!)

स्विफ्ट 4

print("c".utf8["c".utf8.startIndex])

या

let cu = "c".utf8
print(cu[cu.startIndex])

दोनों 99 प्रिंट। किसी भी ASCII चरित्र के लिए काम करता है।


स्विफ्ट 4.1

https://oleb.net/blog/2017/11/swift-4-strings/

let flags = "99_problems"
flags.unicodeScalars.map {
    "\(String($0.value, radix: 16, uppercase: true))"
}

नतीजा:

["39", "39", "5F", "70", "72", "6F", "62", "6C", "65", "6D", "73"]


var singchar = "a" as NSString

print(singchar.character(at: 0))

स्विफ्ट 3.1


UnicodeScalar("1")!.value // returns 49

स्विफ्ट 3.1






ascii