0

次の方法で定義されているように、サーバーからバイトデータを受信して​​います

     - (void)socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag
      {

      \//04 01 00
NSString *string = [
                    [NSString alloc] 
                    initWithData:data
                    encoding:NSASCIIStringEncoding
                    ];
NSLog(string);

char *ptr = (void *)[data bytes]; // set a pointer to the beginning of your data bytes

if(*ptr == 0x06) {
    NSLog(@"okay,.. got a  0x06");
}
ptr++; // go to the next byte
if(*ptr == 0x05) {
    NSLog(@"okay,.. got a 0x05");
}
ptr++;
if(*ptr==0X00){
    NSLog(@"okay,.. got a 0X00");

}


//04 01 00
NSString* newStr = [[NSString alloc] initWithData:data
                                         encoding:NSASCIIStringEncoding];
///////////////////
///////////////////
NSLog(@"I received some thing , now trying to read it");
UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@"Data Received" message:newStr delegate:nil cancelButtonTitle:@"ok" otherButtonTitles:nil];
[alert show];
[alert release];

 [sock readDataWithTimeout:-1 tag:0];
//NSLog(@"Reading %@",newStr);

}

ヘキサ値を比較することはできますが、正しく変換できないと思うのでUIAlertViewで表示できません。動的に使用できるように、NSStringおよびNSMutableArrayに変換する方法を教えてください。

4

2 に答える 2

0

これを試して、

   NSString* newStr = [[NSString alloc] initWithData:data
                                     encoding:NSUTF8StringEncoding];
于 2012-04-22T16:33:12.373 に答える
0

あなたのコードは試していませんが、すべての ASCII 文字を視覚的に表現できるわけではありません。ASCII コードが 32 を超えるコードをいくつか試して、文字または数字を探します。または、文字を 10 進数または 16 進数としてエコーします。

于 2012-04-22T15:46:22.887 に答える