Swift3.0 进制转换

    Swift3.0 进制转换

  模块可以直接使用,写的不是很好,欢迎来喷

 

    // Data -> HexStrings

    func dataToHexStringArrayWithData(data: NSData) -> [String] {

        let byteArray:[Int] = DataToIntWithData(data: data)

        var byteStrings: [String] = []

        for (_,value) in byteArray.enumerated() {

            byteStrings.append(ToHex(tmpid: value))

        }

        return byteStrings

    }

    

    // HexString -> Data

    func hexToBytes(bytesStr: String) -> Data? {

        var data = Data(capacity: bytesStr.characters.count / 2)

        let regex = try! NSRegularExpression(pattern: "[0-9a-f]{1,2}", options: .caseInsensitive)

        regex.enumerateMatches(in: bytesStr, options: [], range: NSMakeRange(0, bytesStr.characters.count)) { match, flags, stop in

            let byteString = (bytesStr as NSString).substring(with: match!.range)

            var num = UInt8(byteString, radix: 16)!

            data.append(&num, count: 1)

        }

        guard data.count > 0 else {

            return nil

        }

        return data

    }

    

    

    // Data -> 10

    func DataToIntWithData(data: NSData) -> [Int] {

        var byteArray:[Int] = []

        for i in 0..<data.length {

            var temp:Int = 0

            data.getBytes(&temp, range: NSRange(location: i,length:1 ))

            byteArray.append(temp)

        }

        return byteArray

    }

    

    // 10 -> 16

    func ToHex(tmpid: Int) -> String {

        let leftInt: Int  = tmpid / 16

        let rightInt: Int = tmpid % 16

        var leftIndex: String = ""

        var rightIndex: String = ""

        let numberArray = ["0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"]

        for i in 0..<numberArray.count {

            if i == leftInt {

                leftIndex = numberArray[i]

            }

            if i == rightInt {

                rightIndex = numberArray[i]

            }

        }

        return "\(leftIndex)\(rightIndex)"

    }    

    

    // 16 -> 10

    func ToInt(hexString: String) -> Int {

        var _hexString = hexString

        // 转小写

        _hexString = _hexString.lowercased()

        // 拆分字符串 转成10进制 计算

        var term = 0

        let intArray = ["0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"];

        let _hex = NSString(string: _hexString)

        let left = String(format: "%c", _hex.character(at: 0))

        let right = String(format: "%c", _hex.character(at: 1))

        var leftValue = 0

        var rightValue = 0

        for (index,value) in intArray.enumerated() {

            if left == value {  

                leftValue = index

            }  

            if right == value {

                rightValue = index

            }

        }

        term = leftValue * 16 + rightValue

        return term;

    }

 

-----------------这里是分割线,后续更新---------------------------------

转载于:https://www.cnblogs.com/PLA-Artillery/p/6020727.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值