Если функция предназначена только для отображения символов в виде шестнадцатеричных значений, вы можете использовать:
void myFunc(NSString* data)
{
NSUInteger len = [data length];
unichar *buffer = calloc(len, sizeof(unichar));
if (!buffer) return;
[data getCharacters:buffer range:NSMakeRange(0, len)];
for (NSUInteger i = 0; i < len; i++)
NSLog(@"%04x", (unsigned) buffer[i]);
free(buffer);
}
Это немного более эффективно, чем ваш подход (кроме того, в вашем подходе вы никогда не используете массив release
instrs
, поэтому он будет вытекать в среде без сбора мусора).
Если строка содержит шестнадцатеричных чисел, вам нужно будет многократно использовать метод NSScanner
scanHexInt:
, пока он не вернет NO
.
void myFunc(NSString* data)
{
NSScanner *scanner = [[NSScanner alloc] initWithString:data];
unsigned number;
while ([scanner scanHexInt:&number])
NSLog(@"%u", number);
[scanner release];
}