Iphone Obj-C/iOS:如何检索NSData的内容并进行交互?
我正在从蓝牙LE外设检索unix时间戳,它存储在NSData对象中。如果我将NSData对象的内容打印到调试控制台,它们看起来是正确的,但是如果我尝试将NSData对象转换为整数值,整数值似乎会不断变化Iphone Obj-C/iOS:如何检索NSData的内容并进行交互?,iphone,ios,bluetooth,nsdata,Iphone,Ios,Bluetooth,Nsdata,我正在从蓝牙LE外设检索unix时间戳,它存储在NSData对象中。如果我将NSData对象的内容打印到调试控制台,它们看起来是正确的,但是如果我尝试将NSData对象转换为整数值,整数值似乎会不断变化 NSData*refinedData=[mfrdatasubdatawithrange:range] 它在调试控制台上生成386d5e9a的值 然后我将其转换为整数: uint32\u t unixtimestap=refinedData 最初,这会在调试控制台上生成值342162144。然而,
NSData*refinedData=[mfrdatasubdatawithrange:range]代码>
它在调试控制台上生成386d5e9a的值
然后我将其转换为整数:
uint32\u t unixtimestap=refinedData代码>
最初,这会在调试控制台上生成值342162144。然而,尽管NSData没有变化,该值仍在不断增长。有人能帮我理解发生了什么事吗
如果还不是很明显,我是个新手
谢谢。refinedData
是指向NSData实例的指针。您要访问其内容:
uint32_t unixTimeStamp = *(uint32_t *)[refinedData bytes];
请注意,这是简化的,并且假设蓝牙外围设备返回的字节与设备中的处理器的字节长度相同,range
是正确的,等等。386d5e9a对我来说似乎是一个内存地址。您是否尝试过将数据转换为CString并打印,这可能会对问题有所帮助。如何在调试控制台中生成该值?使用NSLog?我是通过使用NSLog获得它的,但是,我确定这是我想要的值,b/c我已经在设备上硬编码了它(用于测试目的)。我看你还是得到了答案。快乐编码:)谢谢你的回复,安德鲁。这可能是一个愚蠢的基本问题,但在下图中,16e5b718是内存地址,386d5e9a是内容还是相反?如果我使用Andrew的方法,那么unixTimeStamp=16e5b718.Doh!我的回答有误。将字节指针强制转换为指向uint32\t
的指针后,需要取消对其的引用。我已经修正了密码。对于前面的(不正确)代码,unixTimeStamp将是refinedData内容的第一个字节在内存中的地址。您希望refinedData本身包含的字节,因此需要取消对该指针(地址)的引用。请用我更新的答案再试一次。太棒了。谢谢你,成功了。我所要做的就是交换endian ness,它就像一种享受。我欠你一杯啤酒。谢谢