let n = 14var st = String(format:"%02X", n)
st += " is the hexadecimal representation of \(n)"print(st)
0E is the hexadecimal representation of 14
Примечание. В 2этом примере означает ширину поля и представляет минимальную желаемую длину. 0Рассказывает раздуть результат с ведущими 0«s , если это необходимо. (Без 0символа результат будет дополнен ведущими пробелами). Конечно, если результат превышает два символа, длина поля не будет обрезана до ширины 2; он будет расширяться до любой длины, необходимой для отображения полного результата.
Это работает, только если вы Foundationимпортировали (включая импорт Cocoaили UIKit). Это не проблема, если вы занимаетесь программированием для iOS или macOS .
Вы все еще можете использовать NSStringдля этого. Формат:
var st = NSString(format:"%2X", n)
Это делает , так то вещи , как не работать. Если вы хотите иметь возможность добавлять к строке с помощью make в следующее:stNSString+=+=stString
var st = NSString(format:"%2X", n) asString
или же
var st = String(NSString(format:"%2X", n))
или же
var st: String = NSString(format:"%2X", n)
Тогда вы сможете:
let n = 123var st = NSString(format:"%2X", n) asString
st += " is the hexadecimal representation of \(n)"// "7B is the hexadecimal representation of 123"
Шестнадцатеричные и десятичные числа меняются местами в "7B is 123 в шестнадцатеричном формате", поэтому выражение st следует исправить на: st = "(n) is" + String (format: "% 2X", n) + "in hex"
Кевин Слих
@KevinSliech, признаю, что это неоднозначно. Я имел в виду, что кто-то подошел и спросил: «Что означает 7B?», А вы ответили: «7B - это число 123, записанное в шестнадцатеричном формате».
vacawama
Я нахожу оба варианта немного двусмысленными, особенно теперь, когда я прочитал оба ~ 1000 раз. Другой способ - написать: «0x7B = 123d» или что-то в этом роде. Двусмысленность может сбить с толку людей, плохо разбирающихся в альтернативных системах счисления.
Кевин Слих
@KevinSliech, спасибо. Я сделал заявление более ясным.
vacawama
1
В Swift4 вы должны использовать «% 02X» вместо «% 2X», если хотите, чтобы в начале «0», если необходимо («% 2X» вставьте пробел)
Бубу
54
В Swift для этого есть специальный initметод String:
let hex = String(0xF, radix: 16, uppercase: false)
println("hex=\(hex)") // Output: f
let number = UInt("0xF".stringByReplacingOccurrencesOfString("0x", withString:""), radix: 16), numberбудет типа UInt?Если вам нужно еще задать вопрос :)
Rich
mayhap:String(0xf, radix: 0x10, uppercase: false)
Mazyod
@Rich Есть ли у нас этот метод счисления для NSString в Objective C?
Нареш Налламсетти
39
В Swift 5, в соответствии с вашими потребностями, вы можете выбрать один из трех следующих методов для решения вашей проблемы.
№1. Использование String«s init(_:radix:uppercase:)инициализатору
Создает строку, представляющую заданное значение в базе 10 или какой-либо другой указанной базе.
В приведенном ниже коде игровой площадки показано, как создать Stringэкземпляр, представляющий целочисленное значение в шестнадцатеричном формате, используя init(_:radix:uppercase:)и без необходимости импорта Foundation:
Возвращает Stringобъект, инициализированный с использованием заданной строки формата в качестве шаблона, в который подставляются остальные значения аргументов.
Руководство Apple по программированию строк содержит список спецификаторов формата, которые поддерживаются Stringи NSString. Среди этих спецификаторов формата %Xесть следующее описание :
32-разрядное целое число без unsigned intзнака ( ), напечатанное в шестнадцатеричном формате с использованием цифр 0–9 и прописных букв A – F.
В приведенном ниже коде игровой площадки показано, как создать Stringэкземпляр, представляющий целочисленное значение в шестнадцатеричном формате с помощью init(format:_:):
Возвращает Stringобъект, инициализированный с использованием заданной строки формата в качестве шаблона, в который подставляются остальные значения аргументов в соответствии с локалью пользователя по умолчанию.
В приведенном ниже коде игровой площадки показано, как создать Stringэкземпляр, представляющий целочисленное значение в шестнадцатеричном формате с помощью init(format:arguments:):
Вышеупомянутые ответы отлично подходят для значений в диапазоне 32-битного Int, но значения выше этого не будут работать, поскольку значение будет перемещаться.
Вам нужно использовать модификатор длины для значений больше 32-битного Int
% x = 32-разрядное целое число без знака (целое число без знака)
ll = Модификаторы длины, указывающие, что следующий спецификатор преобразования d, o, u, x или X применяется к аргументу long long или unsigned long long.
let hexString = String(format:"%llX", decimalValue)
String s = "0x" + String(n, radix: 16)
Ответы:
Теперь вы можете:
let n = 14 var st = String(format:"%02X", n) st += " is the hexadecimal representation of \(n)" print(st)
Примечание. В
2
этом примере означает ширину поля и представляет минимальную желаемую длину.0
Рассказывает раздуть результат с ведущими0
«s , если это необходимо. (Без0
символа результат будет дополнен ведущими пробелами). Конечно, если результат превышает два символа, длина поля не будет обрезана до ширины2
; он будет расширяться до любой длины, необходимой для отображения полного результата.Это работает, только если вы
Foundation
импортировали (включая импортCocoa
илиUIKit
). Это не проблема, если вы занимаетесь программированием для iOS или macOS .Используйте прописные буквы,
X
если хотите,A...F
и строчные,x
если хотитеa...f
:String(format: "%x %X", 64206, 64206) // "face FACE"
Если вы хотите напечатать целые значения больше чем
UInt32.max
, добавьтеll
( el-el , а не одиннадцать ) в строку формата:let n = UInt64.max print(String(format: "%llX is hexadecimal for \(n)", n))
Оригинальный ответ
Вы все еще можете использовать
NSString
для этого. Формат:var st = NSString(format:"%2X", n)
Это делает , так то вещи , как не работать. Если вы хотите иметь возможность добавлять к строке с помощью make в следующее:
st
NSString
+=
+=
st
String
var st = NSString(format:"%2X", n) as String
или же
var st = String(NSString(format:"%2X", n))
или же
var st: String = NSString(format:"%2X", n)
Тогда вы сможете:
let n = 123 var st = NSString(format:"%2X", n) as String st += " is the hexadecimal representation of \(n)" // "7B is the hexadecimal representation of 123"
источник
В Swift для этого есть специальный
init
методString
:let hex = String(0xF, radix: 16, uppercase: false) println("hex=\(hex)") // Output: f
источник
"0xF"
вUInt
?let number = UInt("0xF".stringByReplacingOccurrencesOfString("0x", withString:""), radix: 16)
,number
будет типаUInt?
Если вам нужно еще задать вопрос :)String(0xf, radix: 0x10, uppercase: false)
В Swift 5, в соответствии с вашими потребностями, вы можете выбрать один из трех следующих методов для решения вашей проблемы.
№1. Использование
String
«sinit(_:radix:uppercase:)
инициализаторуSwift
String
имеетinit(_:radix:uppercase:)
инициализатор со следующим объявлением:init<T>(_ value: T, radix: Int = 10, uppercase: Bool = false) where T : BinaryInteger
В приведенном ниже коде игровой площадки показано, как создать
String
экземпляр, представляющий целочисленное значение в шестнадцатеричном формате, используяinit(_:radix:uppercase:)
и без необходимости импортаFoundation
:let string1 = String(2, radix: 16) print(string1) // prints: "2" let string2 = String(211, radix: 16) print(string2) // prints: "d3" let string3 = String(211, radix: 16, uppercase: true) print(string3) // prints: "D3"
№2. Использование
String
«sinit(format:_:)
инициализаторуFoundation
обеспечиваетString
вinit(format:_:)
инициализатор.init(format:_:)
имеет следующее объявление:init(format: String, _ arguments: CVarArg...)
Руководство Apple по программированию строк содержит список спецификаторов формата, которые поддерживаются
String
иNSString
. Среди этих спецификаторов формата%X
есть следующее описание :В приведенном ниже коде игровой площадки показано, как создать
String
экземпляр, представляющий целочисленное значение в шестнадцатеричном формате с помощьюinit(format:_:)
:import Foundation let string1 = String(format:"%X", 2) print(string1) // prints: "2" let string2 = String(format:"%02X", 1) print(string2) // prints: "01" let string3 = String(format:"%02X", 211) print(string3) // prints: "D3" let string4 = String(format: "%02X, %02X, %02X", 12, 121, 255) print(string4) // prints: "0C, 79, FF"
№3. Использование
String
«sinit(format:arguments:)
инициализаторуFoundation
обеспечиваетString
вinit(format:arguments:)
инициализатор.init(format:arguments:)
имеет следующее объявление:init(format: String, arguments: [CVarArg])
В приведенном ниже коде игровой площадки показано, как создать
String
экземпляр, представляющий целочисленное значение в шестнадцатеричном формате с помощьюinit(format:arguments:)
:import Foundation let string1 = String(format:"%X", arguments: [2]) print(string1) // prints: "2" let string2 = String(format:"%02X", arguments: [1]) print(string2) // prints: "01" let string3 = String(format:"%02X", arguments: [211]) print(string3) // prints: "D3" let string4 = String(format: "%02X, %02X, %02X", arguments: [12, 121, 255]) print(string4) // prints: "0C, 79, FF"
источник
Использовать
let string2 = String(format:"%02X", 1) print(string2) // prints: "01"
В Swift3 основание импорта не требуется, по крайней мере, в проекте. Строка должна иметь все функции как NSString.
источник
Вышеупомянутые ответы отлично подходят для значений в диапазоне 32-битного Int, но значения выше этого не будут работать, поскольку значение будет перемещаться.
Вам нужно использовать модификатор длины для значений больше 32-битного Int
% x = 32-разрядное целое число без знака (целое число без знака)
ll = Модификаторы длины, указывающие, что следующий спецификатор преобразования d, o, u, x или X применяется к аргументу long long или unsigned long long.
let hexString = String(format:"%llX", decimalValue)
источник
Int("hexaString", radix: 16)
Swift 5.2.4
let value = 200 let hexString = String(format: "%02X", value)
источник