如何以声明的形式打印二进制、八进制和十六进制数值



我声明了以下常量并打印它们的值,但当我打印它们时,它们总是以十进制形式打印。如何使它们以最初定义的形式打印?

let binaryInteger = 0b10001
let octalInteger = 0o21
let hexadecimalInteger = 0x11
print("Binary Integer: (binaryInteger) and in binary (binaryInteger)")
print("Octal Integer: (octalInteger) and in octal (octalInteger)")
print("Hexadecimal Integer: (hexadecimalInteger) and in hexadecimal (hexadecimalInteger)")

我想看到的第一个打印语句的输出是:

Binary Integer: 17 and in binary 10001.

我需要在\(以二进制/八进制/十六进制打印(前面放什么?

您必须手动将整数转换为给定的字符串表示:

print("Binary Integer: (binaryInteger) and in binary (String(binaryInteger, radix: 2))")
print("Octal Integer: (octalInteger) and in octal (String(octalInteger, radix: 8))")
print("Hexadecimal Integer: (hexadecimalInteger) and in hexadecimal (String(hexadecimalInteger, radix: 16))")

当然,您也可以创建自定义字符串插值,以便能够使用以下内容:

print("Hexadecimal Integer: (hexadecimalInteger) and in hexadecimal (hexadecimalInteger, radix: 16)")

请参阅此处的示例

基本答案由Silthan给出,我也会将其封装在结构中,这有助于保留原始格式:

enum Radix: Int {

case binary = 2
case octal = 8
case hexa = 16

var prefix: String {
switch self {
case .binary:
return "0b"
case .octal:
return "0o"
case .hexa:
return "0x"
}
}
}
struct PresentableNumber<T> where T: BinaryInteger & CustomStringConvertible {

let number: T
let radix: Radix

var originalPresentation: String {
return radix.prefix + String(number, radix: radix.rawValue)
}
}
extension PresentableNumber: CustomStringConvertible {

var description: String {
return number.description
}
}

通过这种方式,您可以定义并打印您的数字,如下所示:

let binaryInteger = PresentableNumber(number: 0b10001, radix: .binary)
let octalInteger = PresentableNumber(number: 0o21, radix: .octal)
let hexadecimalInteger = PresentableNumber(number: 0x11, radix: .hexa)
print("Binary Integer: (binaryInteger) and in binary (binaryInteger.originalPresentation)")
print("Octal Integer: (octalInteger) and in octal (octalInteger.originalPresentation)")
print("Hexadecimal Integer: (hexadecimalInteger) and in hexadecimal (hexadecimalInteger.originalPresentation)")

输出:

Binary Integer: 17 and in binary 0b10001
Octal Integer: 17 and in octal 0o21
Hexadecimal Integer: 17 and in hexadecimal 0x11

最新更新