0

iOS で、ネットワーク ストリームから取得した文字列と文字列を比較しようとしています。

ストリームを読み取るコードは次のとおりです。

uint8_t buffer[1024];
int len;
    while ([inputStream hasBytesAvailable]) 
    {
        len = [inputStream read:buffer maxLength:sizeof(buffer)];
        if (len > 0) 
        {
            NSString *output = [[NSString alloc] initWithBytes:buffer length:len encoding:NSASCIIStringEncoding];
            [self handleServerResponse: intCommand Response:output];
         }else{
            [self endComms];
         }
     }

相手側のサーバーは常に 1024 バイトの応答を生成し、データの最後に chr(0) を配置してバッファを埋めます。

文字列比較を行う場合:

if (strCut==@"B") {
   //do something...
}

おそらく、文字列に応答と多くのヌル文字が含まれているため、常に否定的な結果が得られます。

応答を文字列に読み込むときに、バッファから空の文字を削除できるようにしたいのですが、iOS でこれを行うのはうまくいきません。

助けてください!

ありがとう。

デイブ

4

2 に答える 2

0

コードが機能しない理由について、間違った仮定をしています。

変化する:

if (strCut == @"B")

に:

if ([strCut isEqualToString:@"B"])

今後の参考のために、決して仮定をしないでください。デバッガーまたは他のツールを使用して、問題が何であるかを確認してください。また、Objective-C に関する入門書を読むことも検討してください。

于 2011-08-07T20:24:36.850 に答える
0

問題は、iOS が低レベルであり、おそらくあなたが慣れているものであるため、== は実際には文字列ではなくアドレスを比較していることです。あなたが欲しいのはこれです。

if ([strCut compare:@"B"] == NSOrderedSame) {
   ...
}

お役に立てれば。

于 2011-08-07T20:33:44.383 に答える