【问题标题】:Swift - Turn Int to binary representationsSwift - 将 Int 转换为二进制表示
【发布时间】:2015-02-08 23:40:17
【问题描述】:

我从我的服务器收到一个 Int,我想将其分解为一组位掩码。例如,如果我的服务器给我数字 3,我们会得到两个值,一个二进制 1 和一个二进制 2。

如何在 Swift 中做到这一点?

【问题讨论】:

标签: swift bitmask


【解决方案1】:

你可以使用:

let number = 3
//radix: 2 is binary, if you wanted hex you could do radix: 16
let str = String(number, radix: 2)
println(str)

打印“11”

let number = 79
//radix: 2 is binary, if you wanted hex you could do radix: 16
let str = String(number, radix: 16)
println(str)

打印“4f”

【讨论】:

    【解决方案2】:

    我不知道有什么好的内置方式,但你可以使用这个:

    var i = 3
    let a = 0..<8
    
    var b = a.map { Int(i & (1 << $0)) }
    // b = [1, 2, 0, 0, 0, 0, 0, 0]
    

    【讨论】:

      【解决方案3】:

      这是一个简单的实现:

      func intToMasks(var n: Int) -> [Int] {
          var masks = [Int]()
          var mask = 1
          while n > 0 {
              if n & mask > 0 {
                  masks.append(mask)
                  n -= mask
              }
              mask <<= 1
          }
          return masks
      }
      
      println(intToMasks(3))    // prints "[1,2]"
      println(intToMasks(1000)) // prints "[8,32,64,128,256,512]"
      

      【讨论】:

        【解决方案4】:
        public extension UnsignedInteger {
          /// The digits that make up this number.
          /// - Parameter radix: The base the result will use.
          func digits(radix: Self = 10) -> [Self] {
            sequence(state: self) { quotient in
              guard quotient > 0
              else { return nil }
        
              let division = quotient.quotientAndRemainder(dividingBy: radix)
              quotient = division.quotient
              return division.remainder
            }
            .reversed()
          }
        }
        
        let digits = (6 as UInt).digits(radix: 0b10) // [1, 1, 0]
        digits.reversed().enumerated().map { $1 << $0 } // [0, 2, 4]
        

        如果需要,也可以反转结果。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-09-15
          • 2014-03-28
          • 1970-01-01
          • 1970-01-01
          • 2019-03-18
          • 2016-10-12
          • 1970-01-01
          相关资源
          最近更新 更多