首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从ConstUnsafePointer<()> )快速转换

从ConstUnsafePointer<()> )快速转换
EN

Stack Overflow用户
提问于 2014-07-11 00:44:49
回答 3查看 2.2K关注 0票数 5

我在测试3。考虑以下目标-C线:

代码语言:javascript
复制
const uint8_t *reportData = [data bytes];

其中data是一个NSData对象。

这行怎么用Swift重写?

data.bytesConstUnsafePointer<()>类型的,虽然有大量关于如何在Swift中创建指针类型的文档,但是没有多少关于如何使用它们的信息。

编辑:添加一些上下文,我试图将苹果的HeartRateMonitor示例代码移植到Swift。此代码与BLE心率监视器交互。我正在编写的这段代码将蓝牙系统接收的数据转换为int,以便在UI中使用。从BT接收的数据应该是一个uint数组,元素0用于检查标志,元素1包含值。

以下是上下文中相同的目标-C行:

代码语言:javascript
复制
const uint8_t *reportData = [data bytes];
uint16_t bpm = 0;

if ((reportData[0] & 0x01) == 0) 
{
    /* uint8 bpm */
    bpm = reportData[1];
} 
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-07-11 05:18:47

您要寻找的是如何将NSData转换为UInt8数组。下面是如何实现的。

代码语言:javascript
复制
import Foundation
let path = "/etc/csh.cshrc" // something existent
let data = NSData(contentsOfFile: path)

var aofb = [UInt8](count:data.length, repeatedValue:0)
data.getBytes(&aofb, length:data.length)

for c in aofb {
    let s = UnicodeScalar(Int(c)).escape(asASCII:true)
    println("\(c):\(s)")
}
票数 6
EN

Stack Overflow用户

发布于 2014-07-11 02:43:52

刚刚构建了以下代码(下面的注释代码在ConstUnsafePointer<()> Beta 3上工作,为了在Beta 2上工作,需要将更改为 2,有关更多信息,请参阅编辑历史记录)

代码语言:javascript
复制
var dataPath = NSBundle.mainBundle().pathForResource("TestData", ofType: "") // What I have in TestData is "GREETINGS WORLD"
var originalData = NSData(contentsOfFile: dataPath)
var dataLength = originalData.length
println("original data: \(originalData)") // Output original data

// Data to bytes
var reportBytes: ConstUnsafePointer<()> = originalData.bytes
var bytesToString = NSString(bytes: reportBytes, length: dataLength, encoding: NSUTF8StringEncoding)
println("string from bytes: \(bytesToString)")

// Bytes to data
var bytesToData = NSData(bytes: reportBytes, length: dataLength)
println("data from bytes: \(bytesToData)")

控制台日志

代码语言:javascript
复制
original data: <47524545 54494e47 5320574f 524c44>
string from bytes: GREETINGS WORLD
data from bytes: <47524545 54494e47 5320574f 524c44>

也发现这可能会有帮助

代码语言:javascript
复制
ConstUnsafePointer<T>

/// This type stores a pointer to an object of type T. It provides no
/// automated memory management, and therefore the user must take care
/// to allocate and free memory appropriately.

希望这能说明问题。

票数 1
EN

Stack Overflow用户

发布于 2015-02-02 12:16:07

在使用Swift处理蓝牙心率监视器时,我找到了将NSData字节值转换为UInt8格式的最简单方法:

代码语言:javascript
复制
let bytes = UnsafePointer<UInt8>(data.bytes)

if bytes[0] & 0x01 == 0 {
    NSLog("BPM \(bytes[1]")
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24688507

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档