Как мне создать «строку» для входа, которая содержит 2 встроенных нуля, а также строки символов для входа и пароля?

#objective-c #ios #nsstring

#objective-c #iOS #nsstring

Вопрос:

Я пытаюсь достичь конца, как закодировано в этом псевдокоде:

 NSString *login;
NSString *pass;
<snip>

NSString *loginString = [NSString stringWithFormat:@"00%@00%@", login, pass];
  

… и, как вы можете себе представить, я получаю предупреждение: «Литерал CFString содержит символ NUL».
Я полностью понимаю почему. Я вставил нулевой символ в свою строку. В чем мне нужна помощь, так это в том, как достичь этой цели с помощью правильного кода Obj-C. Любопытно, что код как есть на самом деле работает, но я знаю, что это проблема, ожидающая появления этого предупреждения.

Примечание — длина символов «login» и «pass» заранее неизвестна, в разное время может отличаться. Таким образом, это устраняет какое-то статическое решение. Спасибо.

Ответ №1:

Я не знаю, зачем вам нужны эти нули, но если вам нужно только связать пароль с пользователем, просто используйте NSString *loginString = [NSString stringWithFormat:@"%@%@", login, pass];

Комментарии:

1. Рубен, спасибо тебе. Я также ранее пробовал ваше предложение, но, как вы согласитесь, это предложение устраняет требуемые нули в строке. Они должны быть там. Речь идет не о том, зачем они мне нужны, а о том, как я это делаю, а затем о том, как достичь цели псевдокода, который их использует. Предложения и справка по-прежнему открыты и приветствуются по этой нерешенной проблеме.

Ответ №2:

Вы могли бы попробовать это:

 unsigned short nullChar[] = {0};
NSString *nullCharSeparator = [[NSString alloc] initWithBytes:nullChar length:sizeof(nullChar) encoding:CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingUTF16LE)];
  

(взято из http://www.cocoabuilder.com/archive/cocoa/174917-nul-characters-in-nsstring-cause-unexpected-results.html )

Тогда что-то вроде этого:

 NSString *loginAndNull = [login stringByAppendingString:nullCharSeparator];
NSString *loginAndPass = [loginAndNull stringByAppendingString:password];
  

Комментарии:

1. это выглядит интересным решением. Я только что решил «принять» сообщение с предупреждением, но это лучше. Я попробую это и вернусь. Спасибо за время.