Kann mir jemmand erklären was genau dieser befehl hier macht? wobei size die Grösse der datei ist. tmp = (Size>>9)+1;
Schon gefunden dank wiki books! Rechtsshift >> Verschiebt den Inhalt einer Variable bitweise nach rechts. Bei einer ganzen nicht negativen Zahl entspricht eine Verschiebung einer Division durch 2n und Abschneiden der Nachkommastellen(falls vorhanden), wobei n die Anzahl der Verschiebungen ist. Das Ergebnis ist implementierungsabhängig, wenn der zu verschiebende Wert negativ ist. Beispiel: y = x >> 1; x y 01010111 00101011
nehmen wir jetzt an tmp ist ein int. dann kann ich ja immer nur volle dateien einlesen. d.h. 4096 byte, 2048, 32768... richtig? Was ist wenn ich eine datei einlesen möchte die 4350 byte hat? wie kann ich sowas realisieren? Weiss es jemand? Es sind doch mit sicherheit leute hier die eine SD karte schon mal angesprochen haben mit einem MC. könnt ihr mir sagen wie ihr das realisiert habt? Bedanke mich im vorraus
Der Grosse wrote: > Kann mir jemmand erklären was genau dieser befehl hier macht? > wobei size die Grösse der datei ist. > > tmp = (Size >> 9) + 1; Ich tippe mal: Die Blockanzahl ausrechnen, die für eine Datei benötigt wird.(bei Blockgröße von 512 Byte) Size>>9 entspricht einer Ganzzahldivision durch 512. Dann wird noch 1 dazu addiert. Beispiel: Dateigröße 768 Byte tmp = (768 >> 9) + 1 tmp = 1 + 1 tmp = 2 stimmt! Sonderfall: Dateigröße ist ein Vielfaches von 512 Byte Beispiel: Dateigröße 1024 Byte tmp = (1024 >> 9) + 1 tmp = 2 + 1 tmp = 3 stimmt nicht, denn es werden nur 2 Blöcke benötigt Gruß LORIO EDIT: Ein Integer kann jede beliebige Ganzzahl aufnehmen, die innerhalb des (unsigned / signed) Integer-Wertebereichs liegt. Beim GCC sind das bei signed: 2^16 ... 0 ... 2^16 - 1 unsigned: 0 ... 2^32 - 1
Da hast du es ja schon erwähnt >Dateigröße 1024 Byte >tmp = (1024 >> 9) + 1 >tmp = 2 + 1 >tmp = 3 >stimmt nicht, denn es werden nur 2 Blöcke benötigt wie mache ich es den dass es in beiden fählen passt?
Danke Christian! dateigrosse = (Size%512); if(dateigrosse==0) { // Berechnen der Blockanzahl: tmp = (Size>>9); } else { // Berechnen der Blockanzahl: tmp = (Size>>9)+1; } Damit geht es. Besten Dank
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.