为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

FFIVE 2019-11-29 15:26:38
是否有任何(至少整数)数字以本机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框架非常相关,而我不在代码中使用它(也未导入其他任何东西),现在我想将其保留在这样,也用于学习目的。
查看完整描述

3 回答

?
墨色风雨

TA贡献1853条经验 获得超6个赞

更新:Xcode 7.2•Swift 2.1.1


extension 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 integer

print("0x7fffffffffffffff".hexaToDecimal)    // "9223372036854775807" decimal integer

print("7fffffffffffffff".hexaToBinaryString) // "111111111111111111111111111111111111111111111111111111111111111" binary (String)

print("0x7fffffffffffffff".hexaToBinaryString) // "111111111111111111111111111111111111111111111111111111111111111"


print("255".decimalToHexaString)   // "ff"       hexa (String)

print("255".decimalToBinaryString) // "11111111" binary (String)

0b11111111


print("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)


查看完整回答
反对 回复 2019-11-29
?
一只甜甜圈

TA贡献1836条经验 获得超5个赞

对于Float,如果您可能希望将IEEE754浮点数设置为HEX


extension Float {

 func floatToHex()->String {

    return String(self.bitPattern, radix: 16, uppercase: true)

 }

}

let f:Float = 3.685746e+19

let 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

 }

}


查看完整回答
反对 回复 2019-11-29
  • 3 回答
  • 0 关注
  • 909 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信