NSData拆分成块

时间:2013-07-17 20:49:48

标签: objective-c nsdata nslog bluetooth-lowenergy

我是NSLogging我从外部源接收回来的NSData流,但由于某种原因,它会将自己分成40个字符块,并且一旦达到40个字符就会转到新行。我正在尝试解析整个流并在特定的地方挑选出值,所以这是一个巨大的麻烦,它一直在跳线。有谁知道如何防止这种行为?这是我的NSLog的一个例子:

2013-07-17 14:44:32.638 Test App
[4041:907] data equals  <3e2c042c 31333037 31373032 34302d30 372c0100>
2013-07-17 14:44:32.698 Test App
[4041:907] data equals  <00000000 2c020000 0000002c 03000000 00002cff>
2013-07-17 14:44:32.758 Test App
[4041:907] data equals  <00000000 00>

编辑:至于相关代码,我正在使用第三方BLE库,所以我认为它没什么用处。这基本上是相关代码的唯一一行:

NSData *data = [BLEdevice readReceivedBytes];
NSLog(@"data equals %@", data);

我给罗伯的建议一个机会,这就是结果:

2013-07-17 15:21:35.399 Test App[4060:907] data equals  <3e2c012c 31333037 31373033 32312d30 372cff00>
2013-07-17 15:21:35.401 Test App[4060:907] data length equals =20
2013-07-17 15:21:35.458 Test App[4060:907] data equals  <00000000>
2013-07-17 15:21:35.460 Test App[4060:907] data length equals =4

它应该只在一行中回传,而不是最多40个字符。也许这是一件好事。

1 个答案:

答案 0 :(得分:2)

如果BLE只发送小数据包,那么你可能无能为力。你呢 可能不应该期望返回一定大小的数据包。

您应该在NSMutableData对象中收集所有收到的块:

// Init once:
NSMutableData *collectedData = [NSMutableData data];

// Append received data in your read loop:
NSData *data = [BLEdevice readReceivedBytes];
[collectedData appendData:data];

现在,您可以在collectedData中搜索特定字节。