将 2 位数字的字符串转换为 Base64

问题描述 投票:0回答:1

对于我的具体问题,我让用户在文本字段中输入两位数字引脚,我认为它会转换为十六进制?不知怎的,然后是base64。例如,我希望 01 的十六进制输出相当于 Base64 AQ==,02 输出 Ag==,最大为 99,即 mQ==。

首先,这样可以吗?有两位数字 [0-9]、[0-9]。不应该有问题,它总是有一个唯一的 base64 值?

第二,我无法让它正常工作

对于输入“01”,我得到 MDE=。这是太多字节并且不正确。我只需要 1 个字节的值。对于输入“0”,我得到 MA==,这是正确的字节数,但只使用一位数字。

我知道我正在做一些根本错误的事情,我发现的所有编码/解码解决方案只会让我更加困惑。我认为这可能与 int 实际上是一个字符串有关,但我无法将 Int 传递给 .data 方法。向比我聪明得多的人寻求建议,这是我的一些快速代码 tyia

 .onChange(of: channelKey, perform: { value in
        // Limit input to two digits because that is what we want               
        let totalBytes = value.utf8.count
        if totalBytes > 2 {
        if let maxBytesString = value.truncated(to: 2) {
        channelKey = maxBytesString
          } 
        }
                                        
        let base64EncodedString = channelKey.data(using: .utf8)!.base64EncodedString()
        
        print("base64EncodedString: ", base64EncodedString) // prints “1” as MQ==

    })

swift utf-8 cryptography base64 hex
1个回答
0
投票

当您获取字符串“01”并使用 .utf8 将其转换为数据时,您将数字 1 的字符串表示形式转换为数据,这实际上是 ASCII 中的“01”(在本例中为 UTF-8),不是二进制值 1(十六进制为 01)。

试试这个:

if let intValue = UInt8(channelKey) {
    var data = Data([intValue])
    let base64EncodedString = data.base64EncodedString()

    print("base64EncodedString: ", base64EncodedString)
}
© www.soinside.com 2019 - 2024. All rights reserved.