NSString stringWithCharacters Unicode Проблема - PullRequest
1 голос
/ 16 ноября 2010

Это должно быть просто - конечно, этот метод должен работать - но я думаю, что у меня какая-то проблема с двумя байтами к одному байту, я думаю.

Целькода заключается в создании строки из 0 символов определенной длины (10 минус количество цифр, которые будут прикреплены к концу).Это выглядит так:

const unichar zero = 0x0030;
NSString *zeroBuffer = [NSString stringWithCharacters:&zero length:(10 - [[NSString stringWithFormat:@"%i", photoID] length])];  

Альтернативная вторая строка (приведение вещи по адресу и нулю):

NSString *zeroBuffer = [NSString stringWithCharacters:(unichar *)&zero length:(10 - [[NSString stringWithFormat:@"%i", photoID] length])];

0x0030 - это адрес цифры 0 вБазовая латинская часть таблицы Unicode.

Если photoID равен 123, я бы хотел, чтобы значение zeroBuffer было равно @ "0000000".То, что на самом деле заканчивается как ноль, а затем некоторые сумасшедшие юникодные символы вдоль строк (не уверен, как это покажет): 1011

1015 *

I 'Я предполагаю, что у меня есть данные, пересекающие границы символов или что-то в этом роде.Я временно переписал это как тупую подстроку, но похоже, что это будет более эффективно.

Что я делаю не так?

1 Ответ

3 голосов
/ 16 ноября 2010

stringWithCharacters:length: ожидает, что первый аргумент будет адресом буфера, содержащего каждый из символов, которые будут вставлены в строку в последовательности. Это чтение вашего нулевого символа для первого символа, затем переход по следующему адресу памяти и чтение любых данных для следующего символа и так далее. Это неправильный способ делать то, что вы пытаетесь сделать.

Увы, встроенного метода repeat-this-string не существует. См. Ответы здесь для предложений.

Кроме того, вы можете полностью избежать этой проблемы и просто сделать это:

[NSString stringWithFormat:@"%010i", photoID];

Это заставляет средство форматирования чисел выводить десятичное число, дополненное десятью нулями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...