无法调用 UnsafeMutablePointer 类型的初始值设定项

2024-02-23

我正在尝试将字符串转换为 SHA256 哈希值,但出现下一个错误:

Cannot invoke initializer for type 'UnsafeMutablePointer<UInt8>' with an argument list of type '(UnsafeMutableRawPointer)'

这就是我的功能:

func SHA256(data: String) -> Data {
    var hash = NSMutableData(length: Int(CC_SHA256_DIGEST_LENGTH))!

    if let newData: Data = data.data(using: .utf8) {
        let bytes = newData.withUnsafeBytes {(bytes: UnsafePointer<CChar>) -> Void in
            CC_SHA256(bytes, CC_LONG(newData.length), UnsafeMutablePointer<UInt8>(hash.mutableBytes))
        }
    }

    return hash as Data
}

所以,对于这一部分

UnsafeMutablePointer<UInt8>(hash.mutableBytes)

我收到此错误:

Cannot invoke initializer for type 'UnsafeMutablePointer<UInt8>' with an argument list of type '(UnsafeMutableRawPointer)'

我该如何解决这个问题以及我做错了什么?


你最好用Data也为了结果hash.

在斯威夫特 3 中,withUnsafePointer(_:) and withUnsafeMutablePointer(:_)是泛型类型,当与“格式良好”的闭包一起使用时,Swift 可以正确推断 Pointee 类型,这意味着您无需手动转换 Pointee 类型。

func withUnsafeBytes((UnsafePointer) -> ResultType) https://developer.apple.com/reference/foundation/data/1780450-withunsafebytes

func withUnsafeMutableBytes((UnsafeMutablePointer) -> ResultType) https://developer.apple.com/reference/foundation/data/1779823-withunsafemutablebytes

func SHA256(data: String) -> Data {
    var hash = Data(count: Int(CC_SHA256_DIGEST_LENGTH))

    if let newData: Data = data.data(using: .utf8) {
        _ = hash.withUnsafeMutableBytes {mutableBytes in
            newData.withUnsafeBytes {bytes in
                CC_SHA256(bytes, CC_LONG(newData.count), mutableBytes)
            }
        }
    }

    return hash
}

在 Swift 3 中,初始化器UnsafePointer and UnsafeMutablePointer在 Swift 2 之前用于转换 Pointee 类型的 已被删除。但在许多情况下,您无需进行指针类型转换即可工作。

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

无法调用 UnsafeMutablePointer 类型的初始值设定项 的相关文章

随机推荐

  • SurfaceView隐藏屏幕上的其他组件

    我正在创建一个 FrameLayout 类型的布局 在其中添加两个视图 两个视图分别是GLSurfaceView和SurfaceView的对象 根据有关 SurfaceView 的 Android 开发人员文档 表面是 Z 排序的 因此它位
  • 如何用 pandas DataFrame 中之前和后续值的平均值替换 NaN?

    如果我有一些缺失值 并且我想用之前和之后值的平均值替换所有 NaN 我该怎么做 我知道我可以使用pandas DataFrame fillna with method ffill or method bfill 用前面或后面的值替换 NaN
  • 使用 AVPlayer 音频播放 AVMutableComposition 不同步

    我有一个带有 2 个音频轨道和 1 个视频轨道的 AVMutableComposition 我使用该合成从 mov 文件中串接大约 40 个不同的视频剪辑 将每个剪辑的视频内容放入合成的视频轨道中 将音频放入音轨中 我用于音乐的第二个音轨
  • 使用异步延迟加载属性

    我已经学会了在我的存储库中延迟加载属性 现在我想这样做 但我还需要从网页加载一些内容 使用 Httpclient 这意味着我的属性将是异步的 public async Task
  • 荷兰国旗 - 不适用于更大的阵列

    我的下面的荷兰国旗解决方案似乎不适用于仅包含 3 个元素 0 1 和 2 的给定输入数组 如果我减小数组的大小 它就会起作用 我无法识别错误 我错过了什么吗 class DNF public static void sort int arr
  • WordPress WP_Query 通话帖子和页面

    我设置了一个功能滑块 用于绘制标记为 功能 的帖子 my query new WP Query array showposts gt 3 tag gt feature 可以在帖子和页面中绘制吗 我知道你可以用以下方式绘制页面 post ty
  • OpenCL 产生错误的计算

    我一直尝试使用openCL做一些计算 但结果不正确 我输入了三个 float3 如下所示 300000 0 0 300000 300000 0 300000 300000 300000 进入这个内核 kernel void gravitat
  • 如何在运行的容器内获取AWS Fargate任务实例元数据?

    当任务在 AWS Fargate 内部启动时 它有一个用于 Cloudwatch 日志的任务 ID guid 并且可以用作唯一的 运行 ID 我正在将 NET Core 应用程序启动到 AWS 容器中 并希望找到一种编程方式来提取任务 ID
  • System.Private.ServiceModel 的问题

    我创建了一个 Core 3 1 应用程序 它使用基于 net 标准 2 0 的 Web 服务 在本地开发环境中一切正常 在我将其部署到 UAT IIS 上之前 我收到以下异常 Exception System IO FileNotFound
  • 在 Mac OS X 10.6.8 上用什么来编译和模拟 Verilog 程序?

    作为教学大纲的一部分 我需要模拟 Verilog 程序 但是 我的大学使用 Xilinx ISE 但它不适用于 Mac 因此 请帮助我提供最好的软件以及有关如何安装和使用它们的一些详细步骤 你可以尝试伊卡洛斯 Verilog http iv
  • Android tab 片段不调用 OnCreateView 从 tab2 切换到 tab1

    这是选择 3 选项卡式布局时 Android Studio 自动生成的代码 问题是当它从第一个选项卡开始时 它会调用onCreateView in class PlaceholderFragment 当我切换到第二个选项卡时 它会再次为该选
  • 嵌套条件与复合条件

    这两个例子中哪一个表现更好 示例1 if condition 1 if condition 2 do something 示例2 if condition 1 and condition 2 do something 如果有的话 差异可以忽
  • 如何跳过空格但将其用作解析器组合器中的标记分隔符

    我正在尝试构建一个小型解析器 其中标记 幸运的是 从不包含空格 空白 空格 制表符和换行符 本质上是标记分隔符 除了有括号等的情况 我正在延长RegexParsers班级 如果我打开skipWhitespace当下一个标记与前一个标记的正则
  • GCC/X86,相对跳转问题

    我正在尝试在 x86 程序集中进行相对跳转 但是我无法让它工作 似乎由于某种原因 我的跳跃不断被重写为绝对跳跃或其他东西 我想做的一个简单的示例程序是这样的 global main main jmp 0x4 ret 由于 jmp 指令有 4
  • 为什么使用 WebRequest 发送 post 数据需要这么长时间?

    我目前正在创建一个 C 应用程序来绑定到 php MySQL 在线系统 应用程序需要将发布数据发送到脚本并获取响应 当我发送以下数据时 username test password test 我收到以下回复 Starting request
  • .png 动画在 spritekit 中性能缓慢

    我的项目中有一个 png 动画 包含 700 张图片 尺寸为 150 像素 x 150 像素 它工作正常 但每次动画开始时 整个游戏都会冻结约 0 1 秒 喜欢它的加载 但我在 initWithSize 中实现了 png 数组 像这样 SK
  • Bash 查找并移动名称中带有“[ ]”的文件

    我正在制作的 bash 脚本的一部分涉及 rar 分割文件 然后在完成后将分割文件移动到另一个目录 因此 如果我有一个像 test file txt 这样的文件 它首先会被 rarred 为 test file txt part1 rar
  • NumPy 排序函数返回 None

    我有一个简单的程序如下 import numpy as np arr np random randn 8 new arr sort new1 np sort arr print new print new1 我希望这两个新数组是相同的排序数
  • 计算值出现的次数

    我有一列带有重复值的文本值 我想创建一个新的唯一值列 无重复 和一个包含每个值的频率的列 最简单的方法是什么 由于行数不足 10 000 因此效率并不是太重要 为了得到答案而不是评论 请将列 例如 A 复制到 B 例如 并且仅对于 B 数据
  • 无法调用 UnsafeMutablePointer 类型的初始值设定项

    我正在尝试将字符串转换为 SHA256 哈希值 但出现下一个错误 Cannot invoke initializer for type UnsafeMutablePointer