Cómo concatenar 3 NSData
variables?Cómo concatenar 3 variables NSData
NSData *iv;
NSData *salt;
NSData *encryptedData;
Necesito unirlos a una sola variable. ¿Puede alguien mostrarme un camino?
Cómo concatenar 3 NSData
variables?Cómo concatenar 3 variables NSData
NSData *iv;
NSData *salt;
NSData *encryptedData;
Necesito unirlos a una sola variable. ¿Puede alguien mostrarme un camino?
utilizar un objeto NSMutableData
y el método -(void)appendData:(NSData *)otherData
Editado para añadir ejemplo:
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"
Usted podría utilizar NSMutableData
's -appendData
método:
NSMutableData *result = [NSMutableData data];
[result appendData:iv];
[result appendData:salt];
[result appendData:encryptedData];
// result now has what you need.
Esto se produce en los gastos generales de la utilización de los datos mutables, que puede ser más lenta & utilizar más memoria, por lo que utilizar con cuidado. En general, no desea que grandes NSData
estén flotando.
En primer lugar crear dos NSObjects
y utilizar este método
-(void)appendData:(NSData *)otherData
y se puso en una NSData
más tarde con 3rd NSData
también concatenar con el mismo método.
Gracias por su ayuda. Pero soy nuevo en el iPhone y estoy un poco confundido ... ¿Pueden darme el código para unirme a estos tres NSData? Gracias de antemano –
Para aquellos que codifican para iOS5 y posterior. Me gustaría mostrar una buena concatenación real. ¿Por qué esas respuestas no son lo suficientemente buenas? Porque implican un uso de memoria adicional para los datos copiados. Veamos la respuesta:
NSMutableData *concatenatedData = [NSMutableData data];
[concatenatedData appendData:iv];
[concatenatedData appendData:salt];
[concatenatedData appendData:encryptedData];
aquí hemos asignado memoria para iv
, salt
y encryptedData
también cada vez que añadimos una de ellas en nuestro concatenación mutable obviamente estamos copiamos a los datos mutables de nuevo. ¿Queremos estos gastos adicionales al tratar con datos de gran tamaño? Yo no.
Hay una manera de evitar este gasto innecesario de memoria - dispatch_data
No voy a explicar cómo funciona, puede buscarlo en Google si lo desea. que sólo le dará un código que funcione:
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);
No se olvide de la ayudante convertidor
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;
}
Huelo la optimización pre-madura. Si otros códigos son lo suficientemente buenos pero aún mejor legibles, deberían ser preferidos. – vikingosegundo
Eso es mucho código para concatenar 3 variables. – quantumpotato
@quantumpotato depende de la cantidad de memoria que utilicen las variables –
Cómo recuperar datos en particular de la NSMutableData. –
@VineeshTPthe concatenatedData IS los datos mutables. – quantumpotato