如何將Int轉換爲Swift中的UInt8? 示例。我想如果你想binary
擁有的22
價值數22轉換爲0b00010110如何在Swift中將十進制數轉換爲二進制數?
var decimal = 22
var binary:UInt8 = ??? //What should I write here?
如何將Int轉換爲Swift中的UInt8? 示例。我想如果你想binary
擁有的22
價值數22轉換爲0b00010110如何在Swift中將十進制數轉換爲二進制數?
var decimal = 22
var binary:UInt8 = ??? //What should I write here?
您可以使用String
初始化,需要一個radix
參數十進制值轉換爲人類可讀的二進制表示:
let num = 22
let str = String(num, radix: 2)
print(str) // prints "10110"
如果你願意,你也可以與任意數量的填充它零很容易地以及:
func pad(string : String, toSize: Int) -> String {
var padded = string
for _ in 0..<(toSize - string.characters.count) {
padded = "0" + padded
}
return padded
}
let num = 22
let str = String(num, radix: 2)
print(str) // 10110
pad(string: str, toSize: 8) // 00010110
,只是爲其分配一個:binary = 22
或者你可以把它寫成binary = 0b00010110
;這兩個陳述是等同的。
我修改了版本雨燕2.0計數的字符串,並增加了長度檢查:
extension String {
func pad(length: Int) -> String {
let diff = length - self.characters.count
if diff > 0 {
var padded = self
for _ in 0..<diff {
padded = "0" + padded
}
return padded
} else {
return self
}
}
}
我同意其他人,雖然for循環似乎是多餘的重複一個字符。
我們可以簡單地用下面的字符串初始化器去:
init(count count: Int, repeatedValue c: Character)
使用示例:
let string = String(count: 5, repeatedValue: char)
這是一個完整的例子:
let someBits: UInt8 = 0b00001110
let str = String(someBits, radix:2) //binary base
let padd = String(count: (8 - str.characters.count), repeatedValue: Character("0")) //repeat a character
print(padd + str)
這是我會怎麼做:
extension String {
public func pad(with padding: Character, toLength length: Int) -> String {
let paddingWidth = length - self.characters.count
guard 0 < paddingWidth else { return self }
return String(repeating: padding, count: paddingWidth) + self
}
}
String(0b1010, radix: 2).pad(with: "0", toLength: 8) //00001010
hm似乎已經不可用 – 2016-09-14 11:23:45
什麼是不可用? – Alexander 2016-09-14 16:15:51
我修改別人的版本SWIFT 3.0使用正確的初始化與重複值
extension String {
func pad(with character: String, toLength length: Int) -> String {
let padCount = length - self.characters.count
guard padCount > 0 else { return self }
return String(repeating: character, count: padCount) + self
}
}
String(37, radix: 2).pad(with: "0", toLength: 8) // "00100101"
創建一個字符串有二進制和十進制的數字系統之間沒有區別,當你與變量的工作,直到你想可視化他們或者如果你想轉換可以容納不同位數的類型。
你的情況,就足以寫出
var decimal = 22
var binary = UInt8(decimal)
但是,這將崩潰(溢出發生)如果decimal
將持有的值超過255,因爲它是UInt8
可容納最大值。
取決於你想要達到的目標,你可以寫
var decimal = 261 // 0b100000101
var binary = UInt8(truncatingBitPattern: decimal) // 0b00000101
你會得到0
結果,因爲這將初始化截斷少顯著位。
第二個選項是
var decimal = 256 // 0b100000000
var binary = UInt8(exactly: decimal) // nil
這個初始化返回nil
結果,而不是崩潰,如果溢出發生。
P.S.如果你想看到二進制字符串表示使用
String(decimal, radix: 2)
String(binary, radix: 2)
UInt8(十進制)和UInt8(確切地說:不生成二進制表示,TruncatingBitPattern不可用。 – ScottyBlades 2017-09-20 18:46:17
所以我最近這個問題出現了。由於各種問題,其他通用解決方案對我無效。總之,這裏是我的解決方案(SWIFT 4):
extension String {
init<B: FixedWidthInteger>(fullBinary value: B) {
self = value.words.reduce(into: "") {
$0.append(contentsOf: repeatElement("0", count: $1.leadingZeroBitCount))
$0.append(String($1, radix: 2))
}
}
}
測試:
// result: 0000000000000000000000000000000000000000000000000000000000001001
String(fullBinary: 9)
// result: 1111111111111111111111111111111111111111111111111111111100000000
String(fullBinary: -256)
// result: 1111111111111111111111111111111111111111111111111101100011110001
String(fullBinary: -9999)
// result: 0000000000000000000000000000000000000000000000000010011100001111
String(fullBinary: 9999)
// result: 1100011000000000000000000000000000000000000011110110100110110101
String(fullBinary: 14267403619510741429 as UInt)
號就沒有底座,直至要顯示他們。 – Kevin 2014-10-03 14:49:11
'var decimal = 22;'即它是一個二進制數字'1 *(2^4)+ 1 *(2^2)+ 1 * 2'; – 2014-10-03 14:59:57
你的問題(基於評論)實際上是:「我如何快速XOR字節?」 – 2014-10-03 15:01:08