Я пытаюсь прочитать в первых четырех байтах файла. Я знаю, что это работает правильно со следующим кодом C:Objective-C/эквивалент какао fread
FILE *file = fopen(URL.path.UTF8String, "rb");
uint data;
fread(&data, 4, 1, file);
NSLog(@"%u", data);
Это печатает: 205
Я пытаюсь найти эквивалентный способ сделать это в Objective-C/с функциями какао. Я пробовал несколько вещей. Я чувствую, как следующее близко:
NSFileHandle *fileHandle = [NSFileHandle fileHandleForReadingFromURL:URL error:nil];
NSData *data2 = [fileHandle readDataOfLength:4];
NSLog(@"%@", data2);
NSLog(@"%u", (uint)data2.bytes);
Это печатает: < cd000000>
и: 1703552
Как и ожидалось, первые четыре байта файла действительно CD000000.
Я предполагаю, что есть одна из двух вещей, вызывающих разницу (или оба):
Fread не считая 0s после CD. Я подтвердил это, только прочитав в 1 байт с файлом, но иногда это число будет больше одного байта, поэтому я не могу его ограничивать. Нужно ли мне вручную проверять, что байты, входящие, не являются 00?
Это как-то связано с контентом. Я пробовал ряд функций, таких как CFSwapInt32BigToHost, но не смог вернуть правильное значение. Было бы здорово, если бы кто-нибудь мог просветить меня о том, как это работает/влияет на это.
(Эквивалент), альтернативный memcpy: '[data getBytes: & value length: sizeof (value)]'. –
Ваш «портативный» пример кода должен учитывать размер типа 'uint'. В противном случае это объясняет тонкие проблемы. – CouchDeveloper
@CouchDeveloper: «Портативное» решение предназначено для портативного чтения 4-байтового целого, ** не ** для портативного чтения 'uint'. Он переносится, потому что 'uint' гарантированно будет не менее 4 байтов. –