अद्यतन: स्विफ्ट 3, सभी चल बिन्दु प्रकार bitPattern
संपत्ति जो के साथ एक ही स्मृति प्रतिनिधित्व एक अहस्ताक्षरित पूर्णांक रिटर्न है के रूप में, और विपरीत रूपांतरण के लिए एक इसी init(bitPattern:)
निर्माता।
उदाहरण:Float
UInt32
रहे हैं:
let x = Float(1.5)
let bytes1 = x.bitPattern
print(String(format: "%#08x", bytes1)) // 0x3fc00000
उदाहरण:UInt32
Float
रहे हैं:
let bytes2 = UInt32(0x3fc00000)
let y = Float(bitPattern: bytes2)
print(y) // 1.5
उसी तरह आप Double
और UInt64
, या CGFloat
के बीच के बीच परिवर्तित कर सकते हैं ए nd UInt
।
पुराना जवाब के लिए स्विफ्ट 1.2 और स्विफ्ट 2:
let x = Float(1.5)
let bytes1 = x._toBitPattern()
print(String(format: "%#08x", bytes1)) // 0x3fc00000
let bytes2: UInt32 = 0b00111111110000000000000000000000
print(String(format: "%#08x", bytes2)) // 0x3fc00000
print(bytes1 == bytes2) // true
इस विधि जो करने के लिए FloatingPointType
प्रोटोकॉल का हिस्सा है: स्विफ्ट चल बिन्दु प्रकार एक _toBitPattern()
विधि है Float
, Double
और CGFloat
अनुरूप:
/// A set of common requirements for Swift's floating point types.
protocol FloatingPointType : Strideable {
typealias _BitsType
static func _fromBitPattern(bits: _BitsType) -> Self
func _toBitPattern() -> _BitsType
// ...
}
(स्विफ्ट 2 के रूप में, ये परिभाषा अब एपीआई दस्तावेज में दिखाई नहीं दे रही है, लेकिन वे अभी भी मौजूद हैं और पहले की तरह काम करते हैं।)
_BitsType
की वास्तविक परिभाषा एपीआई दस्तावेज में दिखाई नहीं देता है, लेकिन यह Double
के लिए Float
के लिए UInt32
, UInt64
, और Int
CGFloat
के लिए है:
print(Float(1.0)._toBitPattern().dynamicType)
// Swift.UInt32
print(Double(1.0)._toBitPattern().dynamicType)
// Swift.UInt64
print(CGFloat(1.0)._toBitPattern().dynamicType)
// Swift.UInt
_fromBitPattern()
रूपांतरण के लिए इस्तेमाल किया जा सकता अन्य दिशा में:
let y = Float._fromBitPattern(0x3fc00000)
print(y) // 1.5
दुर्भाग्य से इस समाधान स्विफ्ट 2.1 के लिए काम नहीं करता है – Qbyte
@Qbyte: मैंने Xcode 7.1.1 और 7.2 बीटा 3 के साथ कोड को दोबारा जांच लिया है। आवश्यक परिवर्तन के अलावा "println" -> "प्रिंट" , संकलित सब कुछ संकलित और काम के रूप में काम किया। - आपको क्या त्रुटि मिल रही है? आप किस एक्सकोड संस्करण का उपयोग कर रहे हैं? –
यह अजीब है ... यह अब काम करता है। लेकिन 'FloatingPointType' प्रोटोकॉल का अंश नहीं मिला, विशेष रूप से' func _toBitPattern() '। – Qbyte