0

我正在 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);

我试了一下 Rob 的建议,结果如下:

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 个字符。也许这是一个BLE的东西。

4

1 回答 1

2

如果 BLE 只发送小数据包,您可能无能为力。而且您可能不应该期望返回特定大小的数据包。

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

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

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

现在您可以在collectedData.

于 2013-07-17T21:35:57.403 回答