将十六进制编码的字符串转换为字符串

2023-12-12

我想转换以下十六进制编码String在斯威夫特 3 中:

dcb04a9e103a5cd8b53763051cef09bc66abe029fdebae5e1d417e2ffc2a07a4

至其等价物String:

Ü°J:\ص7cï  ¼f«à)ýë®^A~/ü*¤

以下网站可以很好地完成这项工作:

http://codebeautify.org/hex-string-converter

http://string-functions.com/hex-string.aspx

但我无法在 Swift 3 中做同样的事情。以下代码也不能完成这项工作:

func convertHexStringToNormalString(hexString:String)->String!{
  if let data = hexString.data(using: .utf8){
      return String.init(data:data, encoding: .utf8)
  }else{ return nil}
}

您的代码没有按照您的想法进行操作。这行:

如果让数据= hexString.data(使用:.utf8){

意思是“将这些字符编码为UTF-8”。这意味着“01”不会编码为 0x01 (1),而是编码为 0x30 0x31 (“0”“1”)。任何地方都没有“十六进制”。

这行:

  return String.init(data:data, encoding: .utf8)

只是获取编码的 UTF-8 数据,将其解释为 UTF-8,然后返回它。这两个方法是对称的,因此您应该期望整个函数返回它所传递的任何内容。

将 Martin 和 Larme 的评论集中到一处。这似乎是用 Latin-1 编码的。 (这是对这些数据进行编码的一种非常尴尬的方式,但如果这是您正在寻找的,我认为这就是编码。)

import Foundation

extension Data {

    // From http://stackoverflow.com/a/40278391:
    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: UInt16) -> UInt8? {
            switch(u) {
            case 0x30 ... 0x39:
                return UInt8(u - 0x30)
            case 0x41 ... 0x46:
                return UInt8(u - 0x41 + 10)
            case 0x61 ... 0x66:
                return UInt8(u - 0x61 + 10)
            default:
                return nil
            }
        }

        self.init(capacity: string.utf16.count/2)
        var even = true
        var byte: UInt8 = 0
        for c in string.utf16 {
            guard let val = decodeNibble(u: c) else { return nil }
            if even {
                byte = val << 4
            } else {
                byte += val
                self.append(byte)
            }
            even = !even
        }
        guard even else { return nil }
    }
}

let d = Data(fromHexEncodedString: "dcb04a9e103a5cd8b53763051cef09bc66abe029fdebae5e1d417e2ffc2a07a4")!
let s = String(data: d, encoding: .isoLatin1)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将十六进制编码的字符串转换为字符串 的相关文章

随机推荐

  • 替换字符组合

    我有一根绳子27AAGCB5913L2ZF 如果有任何一个A or J or K出现在字符串中 那么我需要将它们更改为这三个字母的所有可能组合 如果我将上面的字符串输入传递给程序 那么输出应该是这样的 27AAGCB5913L2ZF 27A
  • 消费者阅读 __consumer_offsets 传递不可读的消息

    我正在尝试从 consumer offsets 主题进行消费 因为这似乎可能是检索有关消费者的 kafka 指标 例如消息延迟等 的最简单方法 理想的方法是从 jmx 访问它 但想先尝试一下 返回的消息似乎被加密或以不可读的形式 也尝试添加
  • 如何在 Laravel 中实现我的 sql 语句?

    我有以下 MySQL 查询 效果很好 它从我的表中返回随机结果 SET prev 0 rownum 0 SELECT utilizador id nome FROM SELECT IF prev lt gt utilizador id ro
  • 两个命名空间之间的不明确引用错误

    我在尝试在浏览器上运行 Web 服务时收到此消息 请注意 源代码是一个 Windows 文件 无法根据我的需要进行更改 编译器错误消息 CS0104 消息 是不明确的引用 在 ThreeDSeekUtils Message 和之间 Syst
  • 如何用javascript制作一个简单的自动播放幻灯片?

    我想制作一个简单的幻灯片放映 在页面加载时自动播放 到目前为止 这是我的代码 HTML div div img src slide 1 png div div img src slide 2 png div div img src slid
  • 使用install_github时出错:'exdir'不存在

    我正在尝试从 github 安装软件包 但不断收到以下错误 Error in unzip src list TRUE exdir does not exist 我猜测 unzip 无权创建要解压缩的目录 但我不知道如何将参数传递给 exdi
  • Boost.python自动转换参数

    我正在使用 boost python 来包装 C 类 A 该类采用字符串作为构造函数 然后我有一个函数 fun A arg 它将引用 A 作为参数 我想要一个 fun 的Python包装器 如果我传递一个对Python字符串的引用的变量 这
  • Prototype 或 JQuery 能否在 AJAX 请求上返回 HTTP 状态代码

    url http example com new Ajax Request url onComplete function transport alert transport status 如果网站正在运行 我希望返回 200 的状态 如果
  • 带有附加数据的 Swift 3 错误

    在 Swift 3 中 在错误 异常中放置 可能很多 附加信息的推荐方法是什么 捕获器可以使用它来解决 处理问题 在我见过的所有例子中 他们都使用enums 与相关的值 这对于大量信息来说似乎过于麻烦 冗长 具体来说 我正在编写一个简单的解
  • 粘贴对象时强制仅粘贴值的 Excel VBA 代码会导致奇怪的行为

    我有一个电子表格 用户可以在其中输入调查数据 并且像许多其他电子表格一样 需要防止用户覆盖各种格式功能 我使用了以下内容 Private Sub Workbook SheetSelectionChange ByVal Sh As Objec
  • 使用流和 sum 方法对 BigDecimal 列表求和

    如果列表中有所有 int 或 long 或其他原始数据类型值 那么我们使用以下方法获得所有值的 sun return items stream mapToInt i gt i sum 我有 BigDecimal 值列表 如何使用查找所有值的
  • 如何使用 Perl 6 运行外部程序? (例如 Perl 5 中的“系统”)

    我可以用system在 Perl 5 中运行外部程序 我喜欢想system就像 Perl 中的微型 Linux 命令行 但是 我找不到相关文档system在 Perl 6 中 等效的是什么 Perl6 实际上有两个命令替换system从 P
  • 纯 CSS 旋转动画在无限循环中损坏

    自从我在这里问问题以来已经有一段时间了 所以如果我做错了什么请原谅 我有一个问题CSS动画 我希望我的动画不断重复但不失去最初的效果 然而 我的代码或 CSS 动画行为似乎存在错误 首先完成后2 个旋转动画 旋转 旋转 定义的 循环开始 但
  • 查询优化:选择相交点的多边形

    我有两个 Oracle 18c 表 ply 多边形 4970 行 pnt 点数 3500 行 形状存储在 SDO GEOMETRY 列中 编辑 我现在意识到大多数点都是重复的 空间上 但我认为这不是问题 数据可以在这里查看 数据库小提琴 我
  • 在 Postgresql 的 where 子句中使用 Alias 列

    我有一个这样的查询 SELECT jobs CASE WHEN lead informations state IS NOT NULL THEN lead informations state ELSE NEW END AS lead st
  • Three.js Raycaster在浏览页面时发生偏移

    如果场景没有显示在整个页面上并且您可以滚动 Raycast 将停止工作并被您滚动的内容所抵消 向一侧滚动 20 像素 在对象下方 20 像素处单击 以便 Raycaster 正确识别该对象 如何解决这个问题 非常感谢您的帮助 使用 var
  • 如何计算句子中的单词数,忽略数字、标点符号和空格?

    我该如何计算句子中的单词数 我正在使用Python 例如 我可能有以下字符串 string I am having a very nice 23 day 那将是7个字 我在处理每个单词前后的随机空格数以及涉及数字或符号时遇到问题 str s
  • R 消息:错误 - 替换有 x 行,数据有 y

    我正在尝试使用该包ggmap使用地址列表计算目标地址的距离 我的 csv 数据如下所示 Order ID Address 1652049 435 E 70TH ST 10021 1652123 1365 YORK AVE 10021 165
  • Sonar Lint 与服务器规则不同步

    Sonar Lint 2 0 它已连接到我自己的 Sonar Qube 服务器 插件没有报告任何问题 问题是它与我的服务器规则不同步 找到了 Java 文档中提到的那些 但它们似乎也不是全部 我想知道这些java规则列表是否仅在未连接到任何
  • 将十六进制编码的字符串转换为字符串

    我想转换以下十六进制编码String在斯威夫特 3 中 dcb04a9e103a5cd8b53763051cef09bc66abe029fdebae5e1d417e2ffc2a07a4 至其等价物String J 7c f A 以下网站可以