Я получил строковое представление NSData
через NSLog
, и я хотел бы построить оригинал NSData
снова для целей тестирования, что лучший способ сделать это?Как построить NSData из описания?
например.
<fe010200 00000000 00011012>
Я получил строковое представление NSData
через NSLog
, и я хотел бы построить оригинал NSData
снова для целей тестирования, что лучший способ сделать это?Как построить NSData из описания?
например.
<fe010200 00000000 00011012>
Я думаю, что-то вроде:
NSArray *wordStrings =
[string componentsSeparatedByCharactersInSet:
[[NSCharacterSet alphanumericCharacterSet] invertedSet]];
NSMutableData *collectedData = [NSMutableData dataWithCapacity:wordStrings.count * sizeof(unsigned)];
for(NSString *word in wordStrings)
{
NSScanner *scanner = [NSScanner scannerWithString:word];
unsigned newInt;
[scanner scanHexInt:&newInt];
[collectedData appendBytes:&newInt length:sizeof(unsigned)];
}
Это создает сканер для каждого слова после использования NSString для обеспечения расстояния в то время как было бы более эффективным, чтобы сделать все, что в сканере, но это только для отладки , правильно? Таким образом вы получаете середина wordStrings, чтобы убедиться, что ваши предположения о разрыве строки точны.
Вот несколько строк, что делает простое сканирование для чисел и добавлять их значения к объекту NSMutableData
NSString *dataIn = @"<fe010200 00000000 00011012>";
const char *ptr = [dataIn cStringUsingEncoding:NSUTF8StringEncoding];
NSMutableData *data = [NSMutableData data];
while (*ptr) {
unsigned char c1 = *ptr;
ptr++;
if (isalpha(c1))
c1 = (10 + c1 - 'a')<<4;
else if (isnumber(c1))
c1 = (c1 - '0')<<4;
else
continue;
if (!*ptr)
break; // Shouldn't occure -- bad input
unsigned char c2 = *ptr;
ptr++;
if (isalpha(c2))
c2 = 10 + c2 - 'a';
else if (isnumber(c2))
c2 = c2 - '0';
c1 = c1 | c2;
[data appendBytes:&c1 length:1];
}
NSLog(@"%@", data);
См См http://stackoverflow.com/questions/7805340/retrieve-nsdata-to -hex-by-length –
Также см. http://stackoverflow.com/questions/7520615/how-to-convert-an-nsdata-into-an-nsstring-hex-string –
Спасибо, похоже на концепцию, но не точно то же самое - меня интересует переход от @ "fe010200 00000000 00011012" к фактическим NSData, содержащим эти байтовые данные. – Boon