Swift本机函数将数字作为十六进制字符串

是否有任何(至少整数)数字以本机Swift方式在字符串中获取其十六进制表示形式?反之。它一定不能使用Foundation。例如,String类具有一个函数


func toInt() -> Int?

它将代表整数的字符串转换为其Int值。我正在寻找类似的东西,使用十六进制字符串。我知道这很容易实现,但是如果Swift已经有了,那就更好了。否则,如果您已经对String和Int进行了扩展以实现以下目的:


let anHex = "0xA0"

if let anInt = anHex.toInt() {

   println(anInt)               // prints 128

   println(anInt.toHexString()) // prints "0xA0"

}

我知道这不是火箭科学,但以防万一,请分享。


PS:这类似于此问题,不同之处在于它与Foundation框架非常相关,而我不在代码中使用它(也未导入其他任何东西),现在我想将其保留在这样,也用于学习目的。


FFIVE
浏览 914回答 3
3回答

墨色风雨

更新:Xcode 7.2•Swift 2.1.1extension String {    var drop0xPrefix:          String { return hasPrefix("0x") ? String(characters.dropFirst(2)) : self }    var drop0bPrefix:          String { return hasPrefix("0b") ? String(characters.dropFirst(2)) : self }    var hexaToDecimal:            Int { return Int(drop0xPrefix, radix: 16) ?? 0 }    var hexaToBinaryString:    String { return String(hexaToDecimal, radix: 2) }    var decimalToHexaString:   String { return String(Int(self) ?? 0, radix: 16) }    var decimalToBinaryString: String { return String(Int(self) ?? 0, radix: 2) }    var binaryToDecimal:          Int { return Int(drop0bPrefix, radix: 2) ?? 0 }    var binaryToHexaString:    String { return String(binaryToDecimal, radix: 16) }}extension Int {    var toBinaryString: String { return String(self, radix: 2) }    var toHexaString:   String { return String(self, radix: 16) }}测试:print("7fffffffffffffff".hexaToDecimal)      // "9223372036854775807" decimal integerprint("0x7fffffffffffffff".hexaToDecimal)    // "9223372036854775807" decimal integerprint("7fffffffffffffff".hexaToBinaryString) // "111111111111111111111111111111111111111111111111111111111111111" binary (String)print("0x7fffffffffffffff".hexaToBinaryString) // "111111111111111111111111111111111111111111111111111111111111111"print("255".decimalToHexaString)   // "ff"       hexa (String)print("255".decimalToBinaryString) // "11111111" binary (String)0b11111111print("11111111".binaryToHexaString)      // "ff"  hexa (String)print("0b11111111".binaryToHexaString)    // "ff"  hexa (String)print("11111111".binaryToDecimal)         // 255 decimal (Int)print("0b11111111".binaryToDecimal)       // 255 decimal (Int)print(255.toBinaryString) // "11111111" binary (String)print(255.toHexaString)   // "ff"       hexadecimal (String)

一只甜甜圈

对于Float,如果您可能希望将IEEE754浮点数设置为HEXextension Float { func floatToHex()->String {    return String(self.bitPattern, radix: 16, uppercase: true) }}let f:Float = 3.685746e+19let hex = f.floatToHex()print("\(hex)")//5FFFC000反之亦然extension String { func hexToFloat() -> Float {    var toInt = Int32(truncatingBitPattern: strtol(self, nil, 16))    var toInt = Int32(_truncatingBits: strtoul(self, nil, 16)) //For Swift 5    var float:Float32!    memcpy(&float, &toInt, MemoryLayout.size(ofValue: float))    return float }}
打开App,查看更多内容
随时随地看视频慕课网APP