come concatenare 3 NSData
variabili?come concatenare 3 variabili NSData
NSData *iv;
NSData *salt;
NSData *encryptedData;
Ho bisogno di unirmi a una singola variabile. Qualcuno può mostrarmi un modo.
come concatenare 3 NSData
variabili?come concatenare 3 variabili NSData
NSData *iv;
NSData *salt;
NSData *encryptedData;
Ho bisogno di unirmi a una singola variabile. Qualcuno può mostrarmi un modo.
utilizzare un oggetto NSMutableData
e il metodo -(void)appendData:(NSData *)otherData
cura di aggiungere esempio:
NSMutableData *concatenatedData = [NSMutableData data];
[concatenatedData appendData:iv];
[concatenatedData appendData:salt];
[concatenatedData appendData:encryptedData];
// and now you have all of the data in the single variable "concatenatedData"
Si potrebbe utilizzare NSMutableData
s' -appendData
metodo:
NSMutableData *result = [NSMutableData data];
[result appendData:iv];
[result appendData:salt];
[result appendData:encryptedData];
// result now has what you need.
questo ha l'overhead di utilizzare i dati mutevoli, che possono essere più lenta & utilizzare più memoria, in modo da utilizzare con cautela. In generale non vuoi che il grande NSData
stia fluttuando.
Innanzitutto creare due NSObjects
e utilizzare questo metodo
-(void)appendData:(NSData *)otherData
e messo in una NSData
successivamente con Anche il 3 ° NSData
concatena con lo stesso metodo.
Grazie per il tuo aiuto. Ma sono nuovo per l'iphone e sono un po 'confuso ... Puoi darmi il codice per unirmi a questi tre NSData .. Grazie in anticipo, –
Per coloro che codificano per iOS5 e versioni successive. Mi piacerebbe mostrare una vera concatenazione. Perché quelle risposte non sono abbastanza buone? Perché riguardano l'utilizzo extra della memoria per i dati copiati. Vediamo la risposta:
NSMutableData *concatenatedData = [NSMutableData data];
[concatenatedData appendData:iv];
[concatenatedData appendData:salt];
[concatenatedData appendData:encryptedData];
qui abbiamo memoria allocata per iv
, salt
e encryptedData
anche ogni volta che aggiungiamo uno di loro al nostro concatenazione mutevole siamo ovviamente copiarlo dati mutabili di nuovo. Vogliamo queste spese extra mentre gestiamo grandi quantità di dati? Io no.
C'è un modo per evitare questa spesa inutile della memoria - dispatch_data
Non ho intenzione di spiegare come funziona, puoi google se vuoi. ho appena invia un codice che funziona:
NSData *iv = [@"some data" dataUsingEncoding:NSUTF8StringEncoding];
NSData *salt = [@"even more data" dataUsingEncoding:NSUTF8StringEncoding];
NSData *encryptedData = [@"and one more" dataUsingEncoding:NSUTF8StringEncoding];
dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
dispatch_data_t dispatch_data_iv = dispatch_data_create([iv bytes], [iv length], queue, DISPATCH_DATA_DESTRUCTOR_DEFAULT);
dispatch_data_t dispatch_data_salt = dispatch_data_create([salt bytes], [salt length], queue, DISPATCH_DATA_DESTRUCTOR_DEFAULT);
dispatch_data_t dispatch_data_encrypted = dispatch_data_create([encryptedData bytes], [encryptedData length], queue, DISPATCH_DATA_DESTRUCTOR_DEFAULT);
iv = nil; salt = nil; encryptedData = nil; // free all parts, we dont need it anymore
dispatch_data_t dispatch_data_concat = dispatch_data_create_concat(dispatch_data_create_concat(dispatch_data_iv, dispatch_data_salt), dispatch_data_encrypted);
NSData *concatenatedNSData = DataFromDispatchData(dispatch_data_concat);
// lets check now if the concatenation works properly
NSString *stringFromConcatenatedNSData = [[NSString alloc]initWithData:concatenatedNSData encoding:NSUTF8StringEncoding];
NSLog(@"%@",stringFromConcatenatedNSData);
non dimenticare l'aiutante-convertitore
NSData *DataFromDispatchData(dispatch_data_t data)
{
NSMutableData *result = [NSMutableData dataWithCapacity: dispatch_data_get_size(data)];
dispatch_data_apply(data, ^(dispatch_data_t region, size_t offset, const void *buffer, size_t size) {
[result appendBytes:buffer length:size];
return (_Bool)true;
});
return result;
}
, odoro l'ottimizzazione pre-matura. Se altri codici sono abbastanza buoni ma ancora meglio leggibili dovrebbero essere preferiti. – vikingosegundo
Questo è un sacco di codice per concatenare 3 variabili. – quantumpotato
@quantumpotato dipende da quanta memoria le variabili usano –
Come recuperare i dati dal particolare NSMutableData. –
@VineeshTP i dati concatenati SONO i dati mutabili. – quantumpotato