「\r\ nIDLE | 03/17/201319:48\n」のようなソケットメッセージを受信するアプリケーションがあります。このメッセージを次のコードでUTF8文字列に変換します。
NSString* newStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
次に、この文字列からコマンドと時間を分離しようとします。
NSArray *nums = [command componentsSeparatedByString:[NSString stringWithFormat:@"%c", (char)13]];
NSLog(@"First separate = %@", nums);
if ([nums count] == 3)
{
NSArray *nums1 = [[nums objectAtIndex:1] componentsSeparatedByString:@"|"];
NSLog(@"second separate = %@", nums1);
if ([nums1 count] == 2)
{
NSString* strState = [(NSString *)[nums1 objectAtIndex:0] description];
NSLog(@"State = %@", strState);
...
}
}
私が次に見るログで:
First separate = (
"IDLE|03/17/2013 19:48",
"\n"
second separate = (
"IDLE",
"03/17/2013 19:48"
State = I
0要素で2番目に分離した後、テキストIDLEがありますが、このテキストI strState変数を取得しようとすると、このテキストの最初の文字のみが表示されます。誰かが私がこの要素の完全なコマンドを取得するのを手伝ってもらえますか?
ありがとうございました。
UPDATE1 前に言ったように、「\ r \ nIDLE | 03/17/2013 19:48\n」のようなソケットメッセージから取得し ます。サーバーからこのメッセージが送信されると確信しています。Socket readコールバックでは、次のコードを使用してこのメッセージを読み取ります。
int result = CFReadStreamRead(_inputStream, (UInt8*)[data mutableBytes], length);
NSString* newStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
ここでアプリは50バイトを読み取り、これはこのメッセージに適していますか?次の図で、この時点で私のデバッガーを確認できます。
しかし、newStrメンバーには、\rしか表示されません。次に、このメッセージを上記のコードと分けて送信します。別のメッセージロガーを試してみると、\ rの代わりにすべてのメッセージが表示されます: ありがとう