Swift - 将整数转换为二进制表示

3

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

我该如何在Swift中实现这个操作?


也许在这个 中你会感兴趣:let data= NSData(array) - GeekRiky
这个回答解决了你的问题吗?如何在Swift中将十进制数转换为二进制? - hariszaman
4个回答

6
您可以使用以下方法:
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"


4

我不知道有没有很好的内置方法,但你可以使用以下方法:

var i = 3
let a = 0..<8

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

1
这是一个直接的实现:

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

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接