我试图让我的数据从套接字检索到一个nsmutablearray。然而我发现的例子和教程显示它首先进入字符串。这很好,我可以从那里解析出来。但我甚至不能得到这个字符串的东西工作。使用nsmutabledata初始化字符串
case NSStreamEventHasBytesAvailable:
{
if(!rawData) {
rawData = [[NSMutableData data] retain];
}
uint8_t buf[1024];
unsigned int len = 0;
len = [(NSInputStream *)theStream read:buf maxLength:1024];
if(len) {
[rawData initWithBytes:buf length:len];
int bytesRead;
bytesRead += len;
[self messageReceived:rawData];
} else {
NSLog(@"no buffer!");
}
NSString *str = [[NSString alloc] initWithData:rawData
encoding:NSUTF8StringEncoding];
NSLog(@"data buffer: %@ |~|string buffer%@",rawData,str);
[str release];
break;
}
,但是你会从字符串下面的输出中看到从来没有得到任何数据(当然实际上我认为它的编码问题,所以我认为它只是看起来是空的)
2011 -09-27 13:14:06.356卡默莱昂[30095:207]数据缓冲器:< 0f000102> |〜|字符串缓冲区
2011-09-27 13:14:06.359卡默莱昂[30095:207]的数据缓冲区中 000003> |〜|字符串缓冲区
2011-09-27 13:14:06.458卡默莱昂[30095:207]数据缓冲器: 00020300> |〜|字符串缓冲区
2011-09-27 13:14:06.659卡默莱昂[30095: 207]数据缓冲器:< 05000b00 0008080e 13163809 2711> |〜|字符串缓冲区
2011-09-27 13:14:06.663卡默莱昂[30095:207]数据缓冲器: 00040101 005A> |〜|串缓冲区
我想要
case NSStreamEventHasBytesAvailable:
{
if(!rawData) {
rawData = [[NSMutableData data] retain];
}
uint8_t buf[1024];
unsigned int len = 0;
len = [(NSInputStream *)theStream read:buf maxLength:1024];
if(len) {
[rawData initWithBytes:buf length:len];
} else {
NSLog(@"no buffer!");
}
const uint8_t *bytes = [rawData bytes];
NSMutableArray *mutableBuffer = [[NSMutableArray alloc] initWithCapacity:len];
for (int i =0; i < [rawData length]; i++) {
[mutableBuffer addObject:[NSString stringWithFormat:@"%02X", bytes[i]]];
}
[self gateKeeper:mutableBuffer];
[mutableBuffer release];
break;
bytesread的东西,并保留选项从我正在阅读的教程(保留我可以发誓我从苹果开发网站获得)在任何情况下,我需要将NSDATA放入NSARRAY或NSMUTABLEARRAY,所以我可以与它一起工作(解析它)。 –
我需要能够操作/解析个别字节 –
这里是使用保留的链接。 http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Streams/Articles/ReadingInputStreams.html#//apple_ref/doc/uid/20002273-BCIJHAGD即时通讯不会这样说,我的权利,但有点说为什么;他们使用保留? (但不像主要问题那么重要) –