在 Swift 中将 NSData 转换为数据,现在当我尝试将字节转换为 [UInt] 时我崩溃了

伊曼·哈劳特

这是旧的 Objective C 代码(令牌是 NSData):

const unsigned *tokenBytes = [credentials.token bytes];
NSString *hexToken = [NSString stringWithFormat:@"%08x%08x%08x%08x%08x%08x%08x%08x",
                      ntohl(tokenBytes[0]), ntohl(tokenBytes[1]), ntohl(tokenBytes[2]),
                      ntohl(tokenBytes[3]), ntohl(tokenBytes[4]), ntohl(tokenBytes[5]),
                      ntohl(tokenBytes[6]), ntohl(tokenBytes[7])];

这是我将其转换为 Swift 的方法:

let tokenBytes = credentials.token.withUnsafeBytes { (bytes: UnsafePointer<[UInt]>) -> [UInt] in
        return bytes[0] // Crash here
    }

    let hexToken = String(format: "%08x%08x%08x%08x%08x%08x%08x%08x",
                          UInt(bigEndian: tokenBytes[0]), UInt(bigEndian: tokenBytes[1]),
                          UInt(bigEndian: tokenBytes[2]), UInt(bigEndian: tokenBytes[3]),
                          UInt(bigEndian: tokenBytes[4]), UInt(bigEndian: tokenBytes[5]),
                          UInt(bigEndian: tokenBytes[6]), UInt(bigEndian: tokenBytes[7])
    )

有谁知道我做错了什么?据我所知,我从 转换byteswithUnsafeBytes正确,但似乎我错了。

哑光

你崩溃的原因是这个表达式:

bytes : UnsafePointer<[UInt]>

您假设数据代表一系列 UInt。所以指向数据开头的指针不像指向 a 的不安全指针[UInt],一个UInt数组它是一个指向 UInt 的不安全指针,即系列中的第一个。你应该说:

bytes : UnsafePointer<UInt>

撞车就这么多。现在让我们来谈谈您在这里主要尝试做的事情。

我不确定字符串格式应该做什么,但我确实理解这个想法ntohl是为了保证某些 C 长整数(32 位)的字节序。所以我将省略字符串格式部分,只讨论如何将接收到的 C long int 流转换为 Data 并反转 long int 的字节序。

假设d是一个可变数据(即用 声明var)。然后,假设它表示一系列 UInt32 little-endian 值,并且您想将它们转换为 big-endian,您会说:

let ct = d.count/4
d.withUnsafeMutableBytes{
    (ptr:UnsafeMutablePointer<UInt32>) in
    for ix in 0..<ct {
        ptr[ix] = ptr[ix].bigEndian
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Swift中将NSData转换为整数

来自分类Dev

在Swift中将整数转换为NSData

来自分类Dev

在Swift中将NSData转换为NSAttributedString

来自分类Dev

在Swift中将JSON转换为NSData和将NSData转换为JSON

来自分类Dev

如何在Swift中将Int转换为NSData?

来自分类Dev

在Swift中将两个字节的UInt8数组转换为UInt16

来自分类Dev

使用Swift中的write函数将NSData字节写入NSOutputStream时出错(“(')'与'UInt8'”不同)

来自分类Dev

如何在 iOS Objective C 中将 NSData 转换为 UInt8 数组?

来自分类Dev

将NSData ObjectiveC代码转换为Swift时出错

来自分类Dev

将NSData ObjectiveC代码转换为Swift时出错

来自分类Dev

如何在Swift中将Character转换为UInt8

来自分类Dev

在Swift中将int转换为UInt(反之亦然)

来自分类Dev

在Swift中将Int转换为UInt32

来自分类Dev

在Swift中将UIImage转换为UInt8数组

来自分类Dev

如何在Swift中将带有十六进制数据的NSData对象转换为ASCII?

来自分类Dev

在Swift中将NSGlyph转换为CGGlyph(UInt32至UInt16)

来自分类Dev

如何在 Swift 3 中将 UInt16 转换为 UInt8?

来自分类Dev

NSData转换为Swift Integer

来自分类Dev

尝试在Swift中将有效的JSON数据从NSURLConnection转换为NSDictonary时发生崩溃/错误

来自分类Dev

在Swift中将十六进制字符串转换为NSData

来自分类Dev

在iOS中将NSString转换为NSData

来自分类Dev

在NSURLConnection中将NSData转换为NSString = null

来自分类Dev

如何在Swift中将UInt8字节数组转换为字符串

来自分类Dev

从NSString转换为NSData时

来自分类Dev

在C中将字节转换为uint32

来自分类Dev

Swift将UInt转换为Int

来自分类Dev

在Swift中将字节转换为char

来自分类Dev

在Swift中将字节转换为char

来自分类Dev

在Swift中将结构序列化为NSData

Related 相关文章

  1. 1

    在Swift中将NSData转换为整数

  2. 2

    在Swift中将整数转换为NSData

  3. 3

    在Swift中将NSData转换为NSAttributedString

  4. 4

    在Swift中将JSON转换为NSData和将NSData转换为JSON

  5. 5

    如何在Swift中将Int转换为NSData?

  6. 6

    在Swift中将两个字节的UInt8数组转换为UInt16

  7. 7

    使用Swift中的write函数将NSData字节写入NSOutputStream时出错(“(')'与'UInt8'”不同)

  8. 8

    如何在 iOS Objective C 中将 NSData 转换为 UInt8 数组?

  9. 9

    将NSData ObjectiveC代码转换为Swift时出错

  10. 10

    将NSData ObjectiveC代码转换为Swift时出错

  11. 11

    如何在Swift中将Character转换为UInt8

  12. 12

    在Swift中将int转换为UInt(反之亦然)

  13. 13

    在Swift中将Int转换为UInt32

  14. 14

    在Swift中将UIImage转换为UInt8数组

  15. 15

    如何在Swift中将带有十六进制数据的NSData对象转换为ASCII?

  16. 16

    在Swift中将NSGlyph转换为CGGlyph(UInt32至UInt16)

  17. 17

    如何在 Swift 3 中将 UInt16 转换为 UInt8?

  18. 18

    NSData转换为Swift Integer

  19. 19

    尝试在Swift中将有效的JSON数据从NSURLConnection转换为NSDictonary时发生崩溃/错误

  20. 20

    在Swift中将十六进制字符串转换为NSData

  21. 21

    在iOS中将NSString转换为NSData

  22. 22

    在NSURLConnection中将NSData转换为NSString = null

  23. 23

    如何在Swift中将UInt8字节数组转换为字符串

  24. 24

    从NSString转换为NSData时

  25. 25

    在C中将字节转换为uint32

  26. 26

    Swift将UInt转换为Int

  27. 27

    在Swift中将字节转换为char

  28. 28

    在Swift中将字节转换为char

  29. 29

    在Swift中将结构序列化为NSData

热门标签

归档