无忧启动论坛

 找回密码
 注册
搜索
最纯净的「微PE装机优盘」UEPON大师作品系统gho:最纯净好用系统下载站虚位以待
虚位以待广告联系 QQ:184822951 微信:wuyouceoidc大全★服务器租用★香港/5M/450元
查看: 9115|回复: 4

[原创] swift 二进制、十进制、十六进制转换

[复制链接]
发表于 2014-12-21 15:59:14 | 显示全部楼层 |阅读模式
1. 十进制 -> 二进制
  1. func dec2bin(var number:Int) -> String {
  2.     var str = ""
  3.     while number > 0 {
  4.         str = "\(number % 2)" + str
  5.         number /= 2
  6.     }
  7.     return str
  8. }
复制代码


2. 二进制 -> 十进制
  1. func bin2dec(num:String) -> Int {
  2.     var sum = 0
  3.     for c in num {
  4.         sum = sum * 2 + "\(c)".toInt()!
  5.     }
  6.     return sum
  7. }
复制代码


3. 十进制 -> 十六进制
  1. func dec2hex(num:Int) -> String {
  2.    return String(format: "%0X", num)
  3. }
复制代码


4. 十六进制 -> 十进制
  1. func hex2dec(num:String) -> Int {
  2.     let str = num.uppercaseString
  3.     var sum = 0
  4.     for i in str.utf8 {
  5.         sum = sum * 16 + Int(i) - 48 // 0-9 从48开始
  6.         if i >= 65 {                 // A-Z 从65开始,但有初始值10,所以应该是减去55
  7.             sum -= 7
  8.         }
  9.     }
  10.     return sum
  11. }
复制代码
 楼主| 发表于 2014-12-27 17:10:40 | 显示全部楼层

其他方法

//1. 十进制 -> 二进制
  1. func dec2bit(var number:Int) -> String {
  2.     var str = ""
  3.     while number > 0 {
  4.         // 累加二进制的个位
  5.         str = "\(number & 1)" + str
  6.         // 向左移位去掉个位
  7.         number = number >> 1
  8.     }
  9.     return str
  10. }
复制代码


二进制 -> 十进制
  1. func bin2dec(var number:Int) -> Int {
  2.     var sum = 0
  3.     var bit = 1
  4.     while number > 0 {
  5.         sum = (number % 10) * bit + sum
  6.         number /= 10
  7.         bit *= 2
  8.     }
  9.     return sum
  10. }
复制代码
回复

使用道具 举报

 楼主| 发表于 2014-12-27 17:17:50 | 显示全部楼层
// 转换单个0-15数字为十六进制 0-9,A-F
  1. func int2AF(number:Int) -> String {
  2.     if number <= 9 {
  3.         return "\(number)"
  4.     } else {
  5. //        return "\(Character(UnicodeScalar(number + 55)))"
  6.         return String(format: "0c", number + 55)
  7.     }
  8. }
复制代码


不如用 String(format: "%0x", num).uppercaseString 这一行代码,方法废弃。
回复

使用道具 举报

 楼主| 发表于 2016-3-20 21:55:54 | 显示全部楼层
十进制转十六进制/八进制/二进制


  1. let num = 123
  2. String(num,radix:16)

  3. String(num,radix:8)
  4. String(num,radix:2)
复制代码

回复

使用道具 举报

发表于 2016-5-8 14:04:41 | 显示全部楼层
支持,我认为你太厉害了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2020-1-21 00:06

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表