Swift中的前导二进制零
我把一个十六进制值转换成一个二进制数,但它并没有打印出前导零。我知道swift没有像C一样的内置功能。我想知道当我知道二进制数的最大值是16个字符时,是否有办法打印出任何前导零。我有一些代码可以运行,将十六进制数转换成十进制数,然后转换成二进制数Swift中的前导二进制零,swift,swift3,Swift,Swift3,我把一个十六进制值转换成一个二进制数,但它并没有打印出前导零。我知道swift没有像C一样的内置功能。我想知道当我知道二进制数的最大值是16个字符时,是否有办法打印出任何前导零。我有一些代码可以运行,将十六进制数转换成十进制数,然后转换成二进制数 @IBAction func HextoBinary(_ sender: Any) { //Removes all white space and recognizes only text let origHex = textView.text.tri
@IBAction func HextoBinary(_ sender: Any)
{
//Removes all white space and recognizes only text
let origHex = textView.text.trimmingCharacters(in: .whitespacesAndNewlines)
if let hexNumb_int = Int(origHex, radix:16)
{
let decNumb_str = String(hexNumb_int, radix:2)
textView.text = decNumb_str
}
}
非常感谢您的帮助。创建固定长度(具有前导0)二进制表示的另一种方法:
extension UnsignedInteger {
func toFixedBinaryString(_ bits: Int = MemoryLayout<Self>.size*8) -> String {
let uBits = UIntMax(bits)
return (0..<uBits)
.map { self.toUIntMax() & (1<<(uBits-1-$0)) != 0 ? "1" : "0" }
.joined()
}
}
extension SignedInteger {
func toFixedBinaryString(_ bits: Int = MemoryLayout<Self>.size*8) -> String {
return UIntMax(bitPattern: self.toIntMax()).toFixedBinaryString(bits)
}
}
let b: UInt16 = 0b0001_1101_0000_0101
b.toFixedBinaryString(16) //=>"0001110100000101"
b.toFixedBinaryString() //=>"0001110100000101"
let n: Int = 0x0123_CDEF
n.toFixedBinaryString(32) //=>"00000001001000111100110111101111"
n.toFixedBinaryString() //=>"0000000000000000000000000000000000000001001000111100110111101111"
扩展无符号整数{
func-toFixedBinaryString(u位:Int=MemoryLayout.size*8)->String{
设uBits=UIntMax(位)
返回(0..“00011110000001”
设n:Int=0x0123\u CDEF
n、 toFixedBinaryString(32)/=>“0000000 1001000111100110111101111”
n、 toFixedBinaryString()/=>“0000000000000000000000000000000001001000111100110111111”
链接到“duplicate”的代码用于Swift 1、2和3。为什么Any
作为返回类型而不是String
?@MartinR,这只是一个错误。可能我接受了一些Xcode建议,但没有完成。