在 Swift 中将 bytes/UInt8 数组转换为 Int

2024-04-17

如何将4字节数组转换为对应的Int?

let array: [UInt8] ==> let value : Int

Example:

Input:

\0\0\0\x0e

Output:

14

我在互联网上找到的一些代码不起作用:

let data = NSData(bytes: array, length: 4)
data.getBytes(&size, length: 4)
// the output to size is 184549376

有两个问题:

  • Int是 64 位平台上的 64 位整数,您的输入数据 只有 32 位。
  • Int在当前所有 Swift 平台上使用小端表示法, 您的输入是大尾数。

话虽这么说,以下内容会起作用:

let array : [UInt8] = [0, 0, 0, 0x0E]
var value : UInt32 = 0
let data = NSData(bytes: array, length: 4)
data.getBytes(&value, length: 4)
value = UInt32(bigEndian: value)

print(value) // 14

或者使用Data在斯威夫特 3 中:

let array : [UInt8] = [0, 0, 0, 0x0E]
let data = Data(bytes: array)
let value = UInt32(bigEndian: data.withUnsafeBytes { $0.pointee })

通过一些缓冲区指针魔法,您可以避免中间 复制到NSData对象(Swift 2):

let array : [UInt8] = [0, 0, 0, 0x0E]
var value = array.withUnsafeBufferPointer({ 
     UnsafePointer<UInt32>($0.baseAddress).memory
})
value = UInt32(bigEndian: value)

print(value) // 14

对于此方法的 Swift 3 版本,请参阅ambientlight 的答案。

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

在 Swift 中将 bytes/UInt8 数组转换为 Int 的相关文章

随机推荐

  • Proguard AWS s3 问题

    尝试为 amazon s3 实现 proguard 时遇到一个真正的问题 它在第 29 行加载应用程序时不断崩溃 即 s3Client new AmazonS3Client new BasicAWSCredentials Constants
  • 对行进行排序后,Ag-grid 拖放不起作用

    在 Ag grid react 上对行进行排序后 拖放停止工作 在排序之前 拖放已全部设置完毕并且运行良好 postSort API 似乎没有什么可以实现我需要的东西 重置行 甚至设置可拖动 就像选择一样 postSort nodes gt
  • 从谷歌地图中删除标记簇[不仅仅是标记]

    在我的phonegapp cordova应用程序中 我使用谷歌地图工具 有时我需要更改其上显示的点 我发现了一些有用的代码here https developers google com maps documentation javascr
  • 集成 Gitlab 和 TravisCi

    有没有办法将 Travis Ci 与 Gitlab 集成 或者至少使用用户名和密码而不是 Github 凭据登录 TravisCi 不 截至目前 Travis CI 与 GitHub 严格绑定 虽然确实有关于减少这一要求的讨论 但它仍然存在
  • 为什么 std::pow(double, int) 从 C++11 中删除?

    在调查的同时计算 p q 求幂 的有效方法 其中 q 是整数 https stackoverflow com questions 5625431回顾 C 98 和 C 11 标准 我注意到显然std pow double int C 11
  • Google 脚本:将列中的新值附加到另一个工作表

    我一直在研究这个项目 但无法让它按照我想要的方式工作 我有两张表 其中一列具有唯一 ID 我需要确保每当在一张工作表 Sheet1 中添加新 ID 时 它都会被复制到另一张工作表 Sheet2 中的最后一个空行 如果该值已经存在 请确保它忽
  • 解析日期后从 Oracle Select 语句返回数字

    我想编写一个 Oracle SQL select 语句 告诉它是否可以通过返回代码来解析给定格式的日期字符串 失败时返回零 异常 成功时返回正数 SELECT CASE WHEN PARSING SUCCESSFUL ie to date
  • 使用字典替换字符串

    我正在学习 python 并处理字符串 以找到使用字典进行字符串替换的更好方法 我有一个包含自定义占位符的字符串 如下所示 placeholder prefix placeholder suffix dict key1 string key
  • Azure Function-使用 python 代码解压缩受密码保护的文件

    我正在尝试解压缩存储在 Azure Blob 容器上的受密码保护的文件 我想将其提取到 Azure Blob 本身上 我已经使用Python创建了一个Azure函数应用程序 目前它是基于定时器控制事件的 来测试东西 以下是我的代码 我不确定
  • 启用了 Delphi VCL 样式的平面工具栏按钮?

    如果没有启用 VCL 样式 我的 TActionToolbar 看起来就像平面工具栏 然而 如果我启用几乎任何 VCL 样式 突然间所有工具栏按钮看起来都像 3d 按钮 VCL Style Viewer 应用程序显示具有平面和类似按钮外观的
  • 是否可以在 Multimarkdown 中执行“制表符”?

    有没有办法在Multimarkdown语法中实现制表符 我的目标是这样的 项目 选项卡 gt 值 其他项目 选项卡 gt 值 还有一项 gt 价值 我可以意识到通过table https stackoverflow com a 405896
  • AngularJs 指令加载事件

    我刚刚开始使用 AngularJs 指令 使用资源here https docs angularjs org guide directive here http www sitepoint com practical guide angul
  • 如何从 perl 中的字符串变量复制模式

    我需要复制之间的句子内容 and 使用perl 例如说 temp 06 18 2012 08 35 35 PID 2150 现在我需要复制该值2150 之间 and 到一个变量 temp2 使用正则表达式可以轻松实现这一点 my temp2
  • 滚动按钮 - 使用 jQuery

    因此 我正在制作一个列表 您可以通过单击按钮滚动浏览该列表 它还需要有一个可见且工作的滚动条 但我不知道如何编辑我的代码以使它们都能正常工作 我可以让按钮或滚动条工作 但不能同时工作 有人可以帮忙吗 var itemsToShow 3 sc
  • MediaPlayer 无法播放没有扩展名的文件名

    当我尝试玩本地文件组件没有文件扩展名System Windows Controls MediaElement失败并显示 FileNotFoundException 消息 媒体文件下载失败 null 内部异常是System Runtime I
  • 验证 angularjs 中的密码指令

    谁能解释一下这段代码是如何工作的 HTML 标记
  • act_window 中的 openerp 上下文

    在 OpenERP 6 1 中 这个 act window
  • 将自定义列添加到 Propel 模型?

    目前我正在使用以下查询 claims ClaimQuery create c gt leftJoinUser gt withColumn CONCAT User Firstname User Lastname name gt withCol
  • javascript textarea 计算每行字符数

    我正在尝试计算文本区域每一行中的字符数 我尝试修改此代码来计算音节http jsfiddle net 5Zwkq 19 http jsfiddle net 5Zwkq 19 没有成功 任何帮助 将不胜感激 function CharCoun
  • 在 Swift 中将 bytes/UInt8 数组转换为 Int

    如何将4字节数组转换为对应的Int let array UInt8 gt let value Int Example Input 0 0 0 x0e Output 14 我在互联网上找到的一些代码不起作用 let data NSData b