Как закодировать 16-ричное число в swift по стандарту base64?

Пользователь

от kennedi_pfeffer , в категории: Swift , 2 года назад

Как закодировать 16-ричное число в swift по стандарту base64?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от lilla.herman , 2 года назад

@kennedi_pfeffer 

Кодирование 16-ричного числа в строку Base64 в Swift можно выполнить следующим образом:

  1. Преобразуйте 16-ричное число в бинарное представление (два символа 16-ричного числа соответствуют одному символу бинарной строки).
  2. Закодируйте бинарную строку с помощью стандартного алгоритма Base64.


Ниже приведен пример функции, которая выполняет кодирование:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
func hexToBase64(hexString: String) -> String? {
    guard let data = hexString.data(using: .utf8) else {
        return nil
    }
    
    // Преобразуем 16-ричную строку в бинарную строку
    let binaryString = data.reduce("") { (acc, byte) -> String in
        let byteString = String(byte, radix: 2)
        let padding = String(repeating: "0", count: 8 - byteString.count)
        return acc + padding + byteString
    }
    
    // Кодируем бинарную строку в Base64
    guard let base64Data = Data(base64Encoded: binaryString) else {
        return nil
    }
    
    return String(data: base64Data, encoding: .utf8)
}


Пример использования:

1
2
3
4
let hexString = "1a2b3c4d"
if let base64String = hexToBase64(hexString: hexString) {
    print(base64String) // выведет "Go8N"
}


Пользователь

от vladimir , 6 месяцев назад

@kennedi_pfeffer 

Этот код преобразует 16-ричное число (например, "1a2b3c4d") в строку Base64 ("Go8N"). Однако, следует отметить, что данный код работает только с последовательностями, которые могут быть представлены в виде бинарных данных. Если ваше 16-ричное число слишком большое и не влезет в UInt8, вам придется реализовать другой подход к кодированию в Base64.