10进制转16 swift

2017-07-27 10:58:00 weixin_34337265 阅读数 106
  • 这里所说的转换,并不是Swift中字面量之间的转换。如果是字面量之间的转换,ios系统中已经自动帮我们转换了。

例如
let number1:Int = 8
let number2:Int = 0b1000
let number3:Int = 0x8
这三个常量都是同一个值。

  • 接下来要写的是真正意义上的进制之间转换

1.十进制转二进制

//十进制转二进制,返回的是字符串格式
String(15,radix:2)      返回为“1111”
//如果再想把字符串格式改成整型格式
let number = String(15,radix:2)
Int(number)             返回为1111

2.二进制转十进制

func binary2dec(num:String) -> Int {
    var sum = 0
    for c in num.characters {
        sum = sum * 2 + Int("\\(c)")!
    }
    return sum
}
binary2dec("1111")        返回为15

3.十进制转十六进制

//十进制转十六进制,返回的是字符串格式
String(15,radix:16)

4.十六进制转十进制

//如果想逼格高点,可以稍微扩展一下String
extension String{
   static func changeToInt(num:String) -> Int {    
            let str = num.uppercaseString
            var sum = 0
            for i in str.utf8 {
                sum = sum * 16 + Int(i) - 48 // 0-9 从48开始
                if i >= 65 {                 // A-Z 从65开始,但有初始值10,所以应该是减去55
                    sum -= 7
                }
            }
            return sum   
     }
}
String.changeToInt(number2)
//当然也可以不必扩展String,定义一个函数即可。
func changeToInt(num:String) -> Int {
    let str = num.uppercaseString
    var sum = 0
    for i in str.utf8 {
        sum = sum * 16 + Int(i) - 48 // 0-9 从48开始
        if i >= 65 {                 // A-Z 从65开始,但有初始值10,所以应该是减去55
            sum -= 7
        }
    }
    return sum
}
 changeToInt("f")

至此,已经写完平时敲码积累的小心得,希望可以帮助大家对进制转换游刃有余啦。



作者:ChinaSwift
链接:http://www.jianshu.com/p/34d5e958910a
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
2017-08-02 23:04:02 Locationluqc 阅读数 489

swift 中利用UIColor扩展创建16进制转UIColor类如下:
这里写图片描述
代码如下:

extension UIColor {

    class func hexStringToColor(hexString: String) -> UIColor{

        var cString: String = hexString.trimmingCharacters(in: NSCharacterSet.whitespacesAndNewlines)

        if cString.characters.count < 6 {
            return UIColor.black
        }
        if cString.hasPrefix("0X") {
            cString = cString.substring(from: cString.index(cString.startIndex, offsetBy: 2))
        }
        if cString.hasPrefix("#") {
            cString = cString.substring(from: cString.index(cString.startIndex, offsetBy: 1))
        }
        if cString.characters.count != 6 {
            return UIColor.black
        }

        var range: NSRange = NSMakeRange(0, 2)
        let rString = (cString as NSString).substring(with: range)
        range.location = 2
        let gString = (cString as NSString).substring(with: range)
        range.location = 4
        let bString = (cString as NSString).substring(with: range)

        var r: UInt32 = 0x0
        var g: UInt32 = 0x0
        var b: UInt32 = 0x0
        Scanner.init(string: rString).scanHexInt32(&r)
        Scanner.init(string: gString).scanHexInt32(&g)
        Scanner.init(string: bString).scanHexInt32(&b)

        return UIColor(displayP3Red: CGFloat(r)/255.0, green: CGFloat(g)/255.0, blue: CGFloat(b)/255.0, alpha: CGFloat(1))

    }
}
2017-04-18 23:44:59 Ezreal_King 阅读数 61467

今天遇到了进制转换的有趣问题,记录下来。
1,首先,10进制转16进制,大家应该都比较熟:

Integer x = 666;
String hex = x.toHexString(x);
System.out.println(hex);

打印出来的信息是“29a”,需要注意这里转换完的hex是字符串,值是16进制的一个数;

2,然后是16进制转10进制, 可能遇到两种情况:

1)fff;
2)0xfff; 

1)第一种fff好办,直接如下:

String hex = "fff";
Integer x = Integer.parseInt(hex,16);
System.out.println(x);

打印的值为4095。

2)第二种呢,用上述方法就行不通了,因为会将“x”当做16进制的数进行转换,显然”x”不属于16进制里的表示。所以得想个办法把前面的“0x”去掉。

java中,String抽象类自带了一个方法:substring,说明如下:
这里写图片描述
这里写图片描述
一目了然,通俗的说就是截取原字符串的某个连续片段。
好了,转换代码如下:

String hex = "0xfff";
Integer x = Integer.parseInt(hex.substring(2),16);//从第2个字符开始截取
System.out.println(x);

打印结果也是4095,说明方法正确;

2016-05-28 09:30:00 weixin_33928467 阅读数 116


 

    // MARK:
    // MARK: 字符串转二进制 获取二进制的第几位数(字符串)
    /// 字符串转二进制 获取二进制的第几位数(字符串)
     func xnStringAndBinaryDigit(string: String,number: Int) -> String? {
        
        // 字符串转 int
        let valueForInt = (string as NSString).intValue;
        
        // 后面的参数为转换的进制数 2
        let result = String(valueForInt,radix:2);
        
        // 获取字符串内容长度
        var length = result.characters.count;
        
        // 第七位数是
        var seventiethNumber: String?;
        
        /// 遍历字符串中每个字符 我们需要的是右边数起 第七位数
        for i in result.characters {
            
            if length < number {
                
                break;
            }
            
            if length == number {
                
                seventiethNumber = String(i);
                
                break;
            }
            
            length -= 1;
        }
        
        return seventiethNumber;
    }

 

        /*
         十进制Int 转 二进制String
         后面的参数为转换的进制数 2 10 16
         */
        let string = String(3,radix:2);
        
        // String 转 NSString
        let stringNS = NSString.init(string: string);
        
        // NSString 转 Int(十进制)
        let numberInt = stringNS.integerValue;

        // 十进制Int 转十六进制String
        let stringSixteen = String(30,radix:16)
        
        // 十六进制String 转 十进制Int
        let intNumber = stringSixteenChangeToInt(stringSixteen);
        
        print("\(numberInt),\(intNumber)");

    // MARK:
    // MARK: 十六进制String 转 十进制Int
    /// 十六进制String 转 十进制Int
     func stringSixteenChangeToInt(stringSixteen:String) -> Int {
        
        let str = stringSixteen.uppercaseString
        
        var numbrInt = 0
        
        for i in str.utf8 {
            
            numbrInt = numbrInt * 16 + Int(i) - 48
            
            // 0-9 从48开始
            if i >= 65 {
                
                // A-Z 从65开始,但有初始值10,所以应该是减去55
                numbrInt -= 7
            }
        }
        return numbrInt
    }

学自:http://www.jianshu.com/p/34d5e958910a

转载于:https://my.oschina.net/codeismygirl/blog/683164

2016-11-17 18:01:58 youshaoduo 阅读数 11586

直接上代码,都是很简单的进制转换算法

 

final class Conversion {
    
    // MARK: - 十进制转二进制
    class func decTobin(number:Int) -> String {
        var num = number
        var str = ""
        while num > 0 {
            str = "\(num % 2)" + str
            num /= 2
        }
        return str
    }
    
    // MARK: - 二进制转十进制
    class func binTodec(number num: String) -> Int {
        var sum: Int = 0
        for c in num.characters {
            let str = String(c)
            sum = sum * 2 + Int(str)!
        }
        return sum
    }
    
    // MARK: - 十进制转十六进制
    class func decTohex(number:Int) -> String {
        return String(format: "%0X", number)
    }
    
    // MARK: - 十六进制转十进制
    class func hexTodec(number num:String) -> Int {
        let str = num.uppercased()
        var sum = 0
        for i in str.utf8 {
            sum = sum * 16 + Int(i) - 48 // 0-9 从48开始
            if i >= 65 {                 // A-Z 从65开始,但有初始值10,所以应该是减去55
                sum -= 7
            }
        }
        return sum
    }
}

 

 

 

其实系统自带了进制转换的算法

 

print(Conversion.decTobin(number: 4))
print(Conversion.binTodec(number: "100"))
print(Conversion.decTohex(number: 16))
print(Conversion.hexTodec(number: "10"))
//系统自带
print(String(16, radix: 16))
print(String(16, radix: 8))
print(String(16, radix: 2))
print(String(16, radix: 10))