Frage

Ich habe alles versucht, ich mich vorstellen kann und nichts an der Arbeit bekommen. Ich habe eine binäre Datei, die ich in VB.Net geschrieben habe, die im wesentlichen aus einer ganzen Zahl besteht, (binär natürlich), die mir die Array-Größe für die folgenden Daten, dann dem Schwimmer als binäre Daten erzählt. Die Datei schreibt nur gut aus VB.Net, und ich kann es wieder in durch Visual C ++ liest gerade fein mit dem folgenden Code:

ifstream output("c:\\out.ipv", ios::in | ios::binary);
UInt32 len;
UInt32 *ptr2 = (UInt32*)&len;
output.read((char*)ptr2, 4);

Gibt den korrekten Wert von 456.780 Bytes sind: 76, 248, 6, 0. Wenn ich den exakt gleichen Code auf meinem iPad laufen, ich 1043089572. bekommen Wenn ich die alternative Methode unten verwenden:

NSData *data = [[NSData alloc] initWithContentsOfFile:filePath];
UInt32 num;
const NSRange numV = {0, 4};
[data getBytes:&num range:numV];

Dieser Code gibt einen anderen Wert, 124724, und ich bin nicht sicher, wie zu lesen, was das genaue Bytes, die aus der Datei gezogen zu werden. Das ist etwas anderes habe ich versucht herauszufinden, aber nicht arbeiten gehen kann. Jede Idee, warum das gleiche Verfahren, das funktioniert in Visual C ++ wird nicht auf dem iPad arbeiten? Ich bin wirklich ratlos auf diesem.

War es hilfreich?

Lösung 2

OK, etwas wirklich seltsam ist los mit meinen Daten. Ich habe gerade an den Roh-Byte-Werte sowohl in der Visual C ++ sah und Objective-C, und sie stimmen nicht. Ich lese nur die ersten vier Bytes der Datei und einen Blick auf ihre Werte. Ich bin an dieser Stelle davon aus, dass ich sie nicht richtig lesen, aber ich weiß nicht, was ich hier fehle. Der Visual C ++ Code, den ich an den Byte-Werten suchen bin mit unter:

ifstream input("c:\\out.ipv", ios::in | ios::binary);
Byte tmp[4];
input.read((char*)&tmp[0], 4);

Die Werte in dem tmp-Array sind:

76
248
6
0

Wenn ich das gleiche tun in Objective-C:

ifstream input([filePath UTF8String], ios::in | ios::binary);
Byte tmp[4];
input.read((char*)&tmp[0], 4);

ich:

164
72
44
62

Was soll das? Ich hätte zumindest erwartet, dass die gleichen Byte-Werte zu erhalten. Die Datei mit den vier Bytes Ich habe Probleme mit hier: newout1 .ipv

EDIT:

ich realisiert, wo die 164,72,44,62 Byte-Werte kommen aus: Das sind die anfänglichen Werte der Byte-Array, bevor ich etwas setzen drin. Aus irgendeinem Grund die Zeile:

input.read((char*)&tmp[0], 4);

tut nichts. Irgendwelche Ideen, warum es nicht aus der Datei, wie es lesen sollte?

FINAL EDIT:

OK, ich sollte wohl die Antwort auf diese nicht veröffentlichen, da es mich wirklich dumm aussehen lässt, aber ich will nicht, dass jemand diese Beiträge lesen zu verwechseln. So sind die Arrays und Objekte immer wurden die gleichen Werte, egal was der Rückkehr, die auch zufällig, was Werte sie hatten, als sie zugeteilt wurden. Ich hatte eine zu viel. In meinem Dateinamen, so dass er versucht, in out..ipv zu lesen, anstatt out.ipv. Sobald ich den Dateinamen festgelegt, funktionierte alles genau, wie ich es erwartet hatte. Sorry für die Verwirrung, und vielen Dank für everyones Hilfe.

Andere Tipps

Das klingt wie eine Endian-Ausgabe. Sie können eine der Funktionen in <libkern/OSByteOrder.h> verwenden, um Daten in einem bestimmten endianness zu lesen. In Ihrem Fall, können Sie so etwas wie

tun
NSInputStream *istream = [NSInputStream inputStreamWithFileAtPath:filePath];
UInt32 num = 0;
if (istream) {
    uint8_t buffer[4];
    if ([istream read:buffer maxLength:4] == 4) {
        num = OSReadLittleInt32(buffer, 0);
    } else {
        // there weren't 4 bytes in the file
    }
} else {
    // the file could not be opened
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top