Non è possibile dichiarare un array utilizzando una variabile, pertanto Byte byteData[len];
non funzionerà. Se vuoi copiare i dati da un puntatore, devi anche memcpy (che passerà attraverso i dati puntati dal puntatore e copierà ogni byte fino a una lunghezza specificata).
Prova:
NSData *data = [NSData dataWithContentsOfFile:filePath];
NSUInteger len = [data length];
Byte *byteData = (Byte*)malloc(len);
memcpy(byteData, [data bytes], len);
Questo codice allocare dinamicamente la matrice per il formato corretto (è necessario free(byteData)
quando hai finito) e copiare i byte in esso.
È anche possibile utilizzare getBytes:length:
come indicato da altri se si desidera utilizzare una matrice di lunghezza fissa. Questo evita malloc/free ma è meno estensibile e più incline a bufferare i problemi di overflow quindi raramente lo uso mai.
fonte
2009-04-07 06:39:04
byte byteData = malloc (len); appare un avvertimento che dice "l'inizializzazione rende interger dal puntatore senza cast". E byteData risulta essere una variabile di byte, non una matrice di byte. Qualche idea su questo? –
C'era un piccolo refuso nel codice, dovrebbe funzionare ora come previsto. –
Sì. Il secondo parametro di memcpy dovrebbe essere [data byte]. –