2012-02-29 166 views
0

我正在向我的数据库发出请求,作为响应,我收到了一堆数据,我使用NSURLConnection方法将它们放入nsdata对象中。如何从NSData对象中获取值

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data 
{ 
    // Append the new data to receivedData. 
    // receivedData is an instance variable declared elsewhere. 
    [receivedData appendData:data]; 
} 

在NSData对象中的数据具有由UINT16可变1-什么都代表了的代码其每个部分标识符值..

我想知道我怎么能identifiy这些值然后开始解码数据。

我的计划是创建一个类,其中有一个方法,我将数据从上面的方法传入。接收方法然后将分组分开,最有可能传递每个部分到相应的方法,然后可以解码和/或对其进行检查等。等等。

我只是不知道如何可以确定这些主要值这些是UInt16变量的数据表示。

我希望我已经做出了一些道理,如果你能够提出一些建议或示例代码将是非常棒的!

+0

您需要了解C中指针的更多信息...您可以通过[recievedData bytes]访问指针,并从那里访问任何大小的元素 – 2012-02-29 02:56:04

+1

或者您可以将NSData转换为NSString ...顺便问一下你的回答是什么? – 2012-02-29 03:06:33

+0

啊正确..我正在考虑将其转换为一个字符串,但不确定f的影响。我的回答是无符号的32位整数和字符串的混合。每个值的前面都有一个值的数字,然后是字符串的长度(如果它是一个字符串),然后是字符串或无符号的值。这是你的意思吗? – 2012-02-29 03:08:17

回答

1

鉴于数据的结构,您必须手动解析它。在循环中使用-[NSData getBytes:range:]来遍历数据并提取组件。请记住使用NSSwap...ToHost()宏系列将编码数字转换为本机字节顺序。

编辑:查找文档和标题NSSwapLittleIntToHost()NSSwapBigIntToHost()。这些是将外部二进制数字表示转换为本地CPU字节顺序的许多功能中的两种,反之亦然。

+0

真棒!这听起来像是我想要做的事情......我不确定你最后一行的含义(记住使用NSSwap ... ToHost()系列宏将编码后的数字转换为本地字节)如果你有任何补充的话,这将有所帮助,但现在我将开始研究这一点。 :) 非常感谢。 – 2012-02-29 19:23:38

+0

@ C.Johns我在字节顺序函数中增加了一些信息。 – Costique 2012-02-29 20:34:40