亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 996 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號