1

嗨,我正在为 iPAD 制作应用程序,其中我必须捕获来自每秒发送 512 个值的外部设备的数据。我使用了 Apple 的 External Accessories API,代码如下:-

- (void)stream:(NSStream*)theStream handleEvent:(NSStreamEvent)streamEvent  
{  
    switch (streamEvent)  
 {  
   case NSStreamEventNone:  //Sent when open complete
  //NSLog(@"NSStreamEventNone");
   break;   
  case NSStreamEventOpenCompleted:  //Sent when open complete

  //NSLog(@"NStreamEventOpenCompleted: %@", theStream);
  break ;

  case NSStreamEventHasBytesAvailable:
    {
   //NSLog(@"NSStreamEventHasBytesAvailable");

    uint8_t buffer[1024];
    unsigned int len=0;

    len=[(NSInputStream *)theStream  read:buffer maxLength:1024];
    if(len>0){      

    NSData* data=[NSData dataWithBytes:buffer length:len];

    NSString *value = [[NSString alloc] initWithData:dataencoding:NSASCIIStringEncoding];

   }
    }
 break;   

 case NSStreamEventHasSpaceAvailable:  
    os = theStream;
    break;
 case NSStreamEventErrorOccurred:  
   //NSLog(@"NSStreamEventErrorOccurred");
    break;   

  case NSStreamEventEndEncountered:  
    ////NSLog(@"NSStreamEventEndEncountered");
    break;   
  default:  
    break;  
  }  
 }

我从中得到的是一些没有正确编码的乱码。我也尝试过使用以下内容:-

 NSString *value = [[NSString alloc] initWithData:dataencoding:NSUTF8StringEncoding];

但这只是一直返回null。编辑:- 当我 NSLog 时,我得到以下信息:-

 vªª€ÿù…ªª€ ÿûƒªª€ÿK3ªª€ÿ£Ûªª€ÿ˳ªª€ÿ}ªª€ÿ噪ª€

我应该在这里得到整数。有人可以告诉我我在这里做错了什么。

4

2 回答 2

3

您的 NSLog 似乎是一串扩展的 ASCII 字符。假设它们来自 Apple 扩展的 Ascii 字符集,那么您列出的片段开头表示的 uint8_t(1 字节)数据是:

€ÿù…ªª€...

用十进制表示为:

172、196、26、248、26、192、172、214、172、34、172 ...

这是你的数据吗?这是一些测试输出的代码。

NSString *receivedString = @"€ÿù…ªª€"; // Change this to the string variable you were using with NSLog

for (int i=0; i<[receivedString length]; i++) 
{
    unsigned char asciiCode = [ receivedString characterAtIndex:i];
    NSLog( @"Value at %d is %d", i, asciiCode ); 
}
于 2012-12-03T07:52:53.703 回答
0

您收到的数据是原始值。绝对不是 UTF8 字符。很可能您必须直接从 NSData 的字节中将每 2 个字节放入一个 2 字节整数中。

于 2012-12-09T09:24:11.003 回答