Swift. 从整数获取二进制字符串

3

我有一个二进制0000010,表示为一个整数数组。从这个二进制中我得到了一个Integer:

let number = Int32([0, 0, 0, 0, 0, 1, 0].reduce(0, combine: {$0*2 + $1})) // number = 2

但是当我想要反向操作以获得一个String:

let binaryString = String(2, radix: 2) // binaryString = "10"

所以似乎基数会在某些位为0时裁剪掉一些位,如何返回5个零?


1
你真的想要一个 字符串,还是想要一个数组返回? - Martin R
4个回答

3

在转换过程中,String构造函数无法知道Integer在转换之前有多少个零位。您需要自己处理这个问题。

顺便提一下,Int还有基数构造函数,用于将字符串转换为Int:

Int("0000010", radix: 2) // Returns 2

请问您能否解释一下 radix: 2 中的 2 是什么意思? - user2924482
1
@user2924482 基数是数字的进位基础,这里的2表示二进制。https://zh.wikipedia.org/wiki/%E5%8D%81%E8%BF%9B%E5%88%B6 - Dejan Skledar

3
let binaryString = String(2, radix: 2)
let other = String(count: 8 - binaryString.characters.count, repeatedValue: Character("0")) + binaryString

1
虽然这段代码片段可能解决了问题,但是附上解释真的有助于提高你的帖子质量。请记住,你回答问题是为了未来的读者,而这些人可能不知道你给出代码建议的原因。 - J. Chomel

0

FixedWidthInteger协议的文档提供了一个有趣的例子,用于表示数字的二进制形式:

extension FixedWidthInteger {
    var binaryString: String {
        var result: [String] = []
        for i in 0..<(Self.bitWidth / 8) {
            let byte = UInt8(truncatingIfNeeded: self >> (i * 8))
            let byteString = String(byte, radix: 2)
            let padding = String(repeating: "0",
                                 count: 8 - byteString.count)
            result.append(padding + byteString)
        }
        return "0b" + result.reversed().joined(separator: "_")
    }
}


print(Int16.max.binaryString) // Prints "0b01111111_11111111"
print((101 as UInt8).binaryString) // Prints "0b11001001"

0

Swift 5

var binaryString = String(2, radix: 2)
binaryString = String(repeating: "0", count: 8 - binaryString.count) + binaryString

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