Questa risposta è molto simile ad altri risposte di cui sopra, ma ho trovato istruttivo giocare con getto della NSData byte di nuovo ad un [] array int32_t. Questo codice funziona correttamente su un processore little-endian (x64 nel mio caso), ma sarebbe silentemente sbagliato su big-endian (PPC) perché la rappresentazione in byte sarebbe big-endian.
int32_t raw_data[] = {0,1,2,3,4,5,6,7,8,9,10};
printf("raw_data has %d elements\n", sizeof(raw_data)/sizeof(*raw_data));
NSData *data = [NSData dataWithBytes:(void*)raw_data length:sizeof(raw_data)];
printf("data has %d bytes\n", [data length]);
int32_t *int_data_out = (int32_t*) [data bytes];
for (int i=0; i<[data length]/4; ++i)
printf("int %d = %d\n", i, int_data_out[i]);
[data release];
fonte
2011-02-01 07:50:53
Ho usato questo codice nel mio progetto e funziona bene. – Justin808