デバイス制御系の処理を書いているとデバイスのSDKから渡されたNSStringが変な動きをすることがあります。
stringWithFormatで処理しても途中で切れたり、NSMutableStringのappend系で追加しても切れたり。。
私が直面した現象の原因は単純で、null文字がNSStringに含まれていることなんですけど、なんつーかFucking!ですよね。
いくら舌打ちしたところでSDKを修正してもらえるわけではありませんので、対応を。
下記のコードでNSStringに含まれているnull文字を削除できます。
-(NSString*)trimNullString:(NSString*)val { if (!val) return nil; NSInteger length = [val length]; unichar buffer[length]; [val getCharacters:buffer range:NSMakeRange(0, length)]; int endpos = 0; for (int i=0; i<length; i++) { unichar c = buffer[i]; if (c == 0x0){ endpos = i; break; } } if (endpos > 0){ NSString *result = [NSString stringWithCharacters:(const unichar *)buffer length:(NSUInteger)endpos]; return result; } else { return @""; } }