Swift-将Int转换为二进制表示



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

我如何在Swift中做到这一点?

您可以使用:

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"

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

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

这里有一个简单的实现:

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]"
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]

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

最新更新