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

问题描述 投票:3回答:4

我从服务器收到一个Int,我想将其扩展为一系列位掩码。因此,例如,如果我的服务器给我数字3,我们得到两个值,一个二进制数1和一个二进制数2。

如何在Swift中执行此操作?

swift bitmask
4个回答
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]

4
投票

您可以使用:

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”


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

0
投票
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]

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

© www.soinside.com 2019 - 2024. All rights reserved.