Swift 中的十六进制/二进制字符串转换

2023-11-23

Python 有两个非常有用的库方法(binascii.a2b_hex(keyStr) 和 binascii.hexlify(keyBytes)),我在 Swift 中一直在努力解决它们。 Swift 中有什么现成的东西吗?如果没有,又该如何实施呢?考虑到所有边界和其他检查(例如偶数长度密钥)均已完成。


Data从 Swift 3 开始,没有“内置”方法来将其内容打印为 一个十六进制字符串,或者创建一个Data来自十六进制字符串的值。

可以找到“数据到十六进制字符串”方法,例如在如何在 swift 中将数据转换为十六进制字符串 or 如何使用 Swift 打印 Data 类型变量的内容? or 在 swift 3.0 中将字符串转换为数据。这是第一个链接的实现:

extension Data {
    func hexEncodedString() -> String {
        return map { String(format: "%02hhx", $0) }.joined()
    }
}

这是反向“十六进制字符串到数据”的可能实现 转换(取自十六进制字符串到字节 (NSData)代码审查,翻译为 Swift 3 并改进) 作为一个失败的初始化器:

extension Data {

    init?(fromHexEncodedString string: String) {

        // Convert 0 ... 9, a ... f, A ...F to their decimal value,
        // return nil for all other input characters
        func decodeNibble(u: UInt8) -> UInt8? {
            switch(u) {
            case 0x30 ... 0x39:
                return u - 0x30
            case 0x41 ... 0x46:
                return u - 0x41 + 10
            case 0x61 ... 0x66:
                return u - 0x61 + 10
            default:
                return nil
            }
        }

        self.init(capacity: string.utf8.count/2)
        
        var iter = string.utf8.makeIterator()
        while let c1 = iter.next() {
            guard
                let val1 = decodeNibble(u: c1),
                let c2 = iter.next(),
                let val2 = decodeNibble(u: c2)
            else { return nil }
            self.append(val1 << 4 + val2)
        }
    }
}

Example:

// Hex string to Data:
if let data = Data(fromHexEncodedString: "0002468A13579BFF") {
    let idata = Data(data.map { 255 - $0 })
    
    // Data to hex string:
    print(idata.hexEncodedString()) // fffdb975eca86400
} else {
    print("invalid hex string")
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Swift 中的十六进制/二进制字符串转换 的相关文章

  • Pip install 导致此错误“ cl.exe' failed with exit code 2 ”

    我已经阅读了有关此错误的所有其他问题 但令人沮丧的是 没有一个给出有效的解决方案 如果我跑pip install sentencepiece在命令行中 它给出了以下输出 src sentencepiece sentencepiece wra
  • Python 小数.InvalidOperation 错误

    当我运行这样的东西时 我总是收到此错误 from decimal import getcontext prec 30 b 2 3 Decimal b Error Traceback most recent call last File Te
  • 将打开关闭的 Google Chrome 浏览器添加到 Selenium linkedin_scraper 代码中

    我正在尝试抓取一些知名人士的 LinkedIn 个人资料 该代码获取一堆 LinkedIn 个人资料 URL 然后使用Selenium and scrape linkedin收集信息并将其作为 json 文件保存到文件夹中 我遇到的问题是
  • 创建圆形图像 PIL Tkinter

    Currently I have a zoom feature in my application that works very well however I d like the actual zoom box to be a circ
  • 使用信号时出现 django TransactionManagementError

    我有一个与 django 的用户和 UserInfo 一对一的字段 我想订阅用户模型上的 post save 回调函数 以便我也可以保存 UserInfo receiver post save sender User def saveUse
  • 有条件填写 pandas 数据框

    我有一个数据框df列中包含浮点值A 我想添加另一列B这样 B 0 A 0 for i gt 0 B i if np isnan A i then A i else Step3 B i if abs B i 1 A i B i 1 lt 0
  • 在 Swift 2.0 中隐藏 Home 指示器

    我希望隐藏 Home Indicator 虽然这在 Swift 中很简单 但在 SwiftUI 中似乎并不那么容易 我尝试使用这个 如何使用 SwiftUI 隐藏 home 指示器 https stackoverflow com quest
  • 可移植的非关系数据库

    我想尝试 尝试非关系数据库 最好的解决方案是 便携式 这意味着它不需要安装 理想情况下 只需将目录复制粘贴到某个地方即可使其工作 我不介意第一次使用时是否需要编辑一些配置文件或运行配置工具 可从 python 访问 适用于 Windows
  • Pyinstaller --onefile 警告文件已存在但不应存在

    跑步时Pyinstaller onefile 并开始得到结果 exe 会出现多个弹出窗口 并显示以下警告 WARNING file already exists but should not C Users myuser AppData L
  • 为什么在快速合并两个视频或更改背景音乐后视频变成黑屏?

    在我的 ios 应用程序中 我想合并两个视频并更改背景音乐 我尝试过 对于普通视频来说效果很好 但是 当我选择任何延时视频 然后尝试合并或更改背景音乐时 视频变成全黑屏 对于我的应用程序 我使用 swift 4 2 和 xcode 10 我
  • Python 垃圾收集有时在 Jupyter Notebook 中不起作用

    我的一些 Jupyter 笔记本经常出现 RAM 不足的情况 而且我似乎无法释放不再需要的内存 这是一个例子 import gc thing Thing result thing do something thing None gc col
  • 为 Python 2.4 改进“with”语句的直接替换

    您能否建议一种方法来编写可在 Python 2 4 中使用的 with 语句的直接替换代码 这将是一个 hack 但它可以让我更好地将我的项目移植到 Python 2 4 EDIT 删除了不相关的元类草图 只需使用 try finally
  • PyQt - 如何检查 QDialog 是否可见?

    我有个问题 我有这个代码 balls Ball for i in range 1 10 因此 当我说 Ball 时 这将在 QDialog 上绘制一个球 然后当这完成后 我正在移动球QDialog无限循环中 我想说类似的话while QDi
  • django 组合对两个不同基本模型的查询

    我有两个不同的查询集 我想将两个查询集合并 q1 tbl nt 123 objects values list id value geometry filter restriction height exclude condition id
  • 用于 Flutter 原生广告的 Objective-C 的 Swift 等效项

    我想为我的 Flutter 项目实现原生广告 它使用 Swift 而不是 Objective C https developers google com admob flutter native https developers googl
  • VNFaceObservation BoundingBox 在纵向模式下不缩放

    作为参考 这源于一个问题视觉API 我正在努力使用Vision通过a检测图像中的人脸VNDetectFaceRectanglesRequest 它在确定图像中正确的人脸数量并提供boundingBox对于每张脸 我的麻烦是由于我UIImag
  • 使用 Core Data Swift 对 TableView 和行进行分区

    我在 sqlite 中有两个表 代码由 XCode Generation 生成 class Event NSManagedObject NSManaged var startDate NSDate NSManaged var details
  • 如何让你的精灵在pygame中跳跃

    目前我已经制作了一个平台游戏 可以左右移动我的角色 他从地上开始 关于如何让他跳的任何想法 因为我不明白 目前 如果我按住向上键 我的玩家精灵将连续向上移动 或者如果我按下它 我的玩家精灵将向上移动并保持向上 我想找个办法远离他 让我重新跌
  • Swift 从照片库中获取视频的 NSData

    我使用 UIImagePickerController 从我的库中选择视频 我需要提取视频文件的 NSData 我使用以下操作从我的库中选择视频 但我的数据似乎为零 但是我的 AVPlayer 播放生成的 NSURL 中的视频 所以我知道问
  • python中匹配3个或更多相同的字符

    我正在尝试使用正则表达式在字符串中查找三个或更多相同的字符 例如 你好 不匹配 噢 会的 我尝试过做类似的事情 re compile 1 3 a zA Z re compile w 1 5 但似乎都不起作用 w 1 2 是您正在寻找的正则表

随机推荐

  • 简单的 getColumnName(0) 调用会抛出无效的列索引:getValidColumnIndex

    我正在尝试编写一个 JTable 它从 ResultSet 获取数据 并使用它创建一个动态大小的表 其中包含来自 ResultSet 的适当列名称和行数据值 但我无法让 JDBC 动态获取列名称 我知道我的 select 语句很好 我可以使
  • 使用视觉状态管理器设置前景时出现问题

    我有一个 WPF 应用程序 我正在尝试使用 Net v4 视觉状态管理器设置 TextBox 的样式 具体来说 我尝试设置 MouseOver 状态的前景和背景的颜色 正在发生的情况是 虽然背景和边框发生了完美的变化 但前景却没有 如果我使
  • 循环声音 flash as3 的首选方法

    我在 Flash AS3 中循环播放声音时遇到一些问题 因为当我告诉声音循环时 我在音频的结尾 开始处出现轻微的延迟 音频剪辑正确 并且可以在车库乐队上无间隙地播放 我知道 Flash 中普遍存在声音问题 编码错误以及 SOUND COMP
  • 如何将文件发送到浏览器进行下载?

    当客户端请求文件时 我使用以下代码发送它 public static Result download String file File file getRealFile file return Ok file 但我发现浏览器不会下载它 而是
  • 如何知道使用了什么 JAXB 实现?

    我使用 MOXy 作为 JAXB 实现 但不知何故我想在某些管理屏幕上 动态 显示实现名称 例如 Moxy 和版本号 我如何从 JAXB 检索该信息 Cheers 您可以执行类似以下操作来找出正在使用的 JAXB impl import j
  • 对回形针中的视频/图像使用单个附件

    我正在使用回形针上传文件 视频和图像 视频和图像使用相同的附件 源 class Media lt ActiveRecord Base belongs to memory validates attachment presence sourc
  • 分析 wav 并绘制图表

    我正在尝试从 wav 文件中打印出波形 但我有点不知道我应该采取多长的样本 this is what I would love to archieve without the colors 因此 为了读取我的数据 我使用以下代码 first
  • 使用 new 初始化 C# 数组与使用文字初始化

    简单的简短问题 到底有什么区别 int intarray new int 2 1 2 and int intarray2 4 5 6 就像 新 到底做什么 你真的需要它吗 我猜它只是分配内存 或者什么 抱歉 我对 C 完全陌生 在学习过程中
  • Django 空字段后备

    我有一个保存用户地址的模型 这个模型必须有first name and last name字段 因为人们想为收件人设置地址 例如他的公司等 我想要实现的是 If the first name last name地址中的字段已填写 仅返回该字
  • Python - 等待变量更改

    我有一个 Python 脚本 可以打开 Twitter API 的 websocket 然后等待 当事件通过 amq 传递给脚本时 我需要打开一个新的 websocket 连接并立即地新连接注册后立即关闭旧连接 它看起来像这样 stream
  • Python argparse:组合“choices”、“nargs”和“default”时类型不一致

    我有以下 python 程序 usr bin env python import argparse parser argparse ArgumentParser parser add argument arg choices foo bar
  • 使用javascript获取div内第一个输入的id

    HTML div div
  • Rails CSRF 保护 + Angular.js:protect_from_forgery 让我在 POST 上注销

    If the protect from forgeryapplication controller 中提到了选项 然后我可以登录并执行任何 GET 请求 但在第一个 POST 请求时 Rails 会重置会话 从而使我退出 我转动了prote
  • 如何将多个 .net 程序集合并为一个程序集?

    我有一个包含大约 10 个程序集的 net 应用程序 如果将它们作为一个组件组合在一起 那就太好了 我该怎么做 我猜想类似于 Java 应用程序的 jar 文件 Try ILMerge NuGet包here
  • 如何使用 Cocoa 和 Python (PyObjC) 创建状态栏项目?

    我在 XCode 中创建了一个全新的项目 并在我的 AppDelegate py 文件中包含以下内容 from Foundation import from AppKit import class MyApplicationAppDeleg
  • 使用 POST 请求 golang 上传文件

    我是 golang 新手 我正在尝试编写一个函数 为我正在编写的机器人上传带有发布请求的文件到电报 我尝试过使用这段代码 但我从电报中得到的错误是Bad Request there is no photo in the request 我在
  • OpenCV:从USB摄像头捕获的黑色图像

    我正在尝试使用 opencv 从 USB 摄像头捕获图像帧 然而我总是得到一个黑框 我已经阅读了很多有关此问题的帖子并尝试了所有建议 但对我来说没有任何作用 我开始使用这里讨论的代码 http opencv users 1802565 n2
  • 在 LinearLayout 中设置 textview 的宽度

    我正在使用列表视图的标题 ListView 标题有三列 说a b c 我使用两个 LinearLayouts 来设计 ListView 标题 如下所示
  • 新渲染元素的动画,但页面加载时不动画

    我订阅了 Firebase 实时数据库 这样当我向它提交某些内容时 它会立即在视图中呈现 而不需要 jQuery 或 ajax 我想对这些元素的渲染进行动画处理 这样当一个新元素添加到 DOM 时 它的div s background co
  • Swift 中的十六进制/二进制字符串转换

    Python 有两个非常有用的库方法 binascii a2b hex keyStr 和 binascii hexlify keyBytes 我在 Swift 中一直在努力解决它们 Swift 中有什么现成的东西吗 如果没有 又该如何实施呢