![]() |
Delphi-Version: 2010
Dateigröße in Bytes aus Blob auslesen
Guten Abend,
ich steh gerade etwas auf dem Schlauch: ich muss Dateigrößen aus einem Blob auslesen. Ich weiß, dass aus Hex 00 00 00 00 B7 86 44 41 2.690.414 Bytes herauszulesen sind. Und ich weiß, dass in dem HEX-Wert 00 00 00 80 B7 86 44 41 2.690.415 Bytes herauszulesen sind. Die beiden Werte habe ich durch Tests mit 2 Dateien ermittelt, deren Dateigröße ich kenne. Diese wurden in dem Blob hinterlegt. Nur wie liest man die Dateigröße aus dem Blob nun wieder korrekt aus? |
AW: Dateigröße in Bytes aus Blob auslesen
Hi Semo
kommt auf die DB an bei Oracle select length(MyBlobfield) as BlobSize from MyTable Gruß egentur |
AW: Dateigröße in Bytes aus Blob auslesen
Im Blob selbst sind weitere Daten wie Dateiname etc. vorhanden.
Es kommt nur darauf an, aus dem Hex Wert die Anzahl an Bytes auszulesen. Der Datenbankhintergrund kann völlig außer Acht gelassen werden :-) |
AW: Dateigröße in Bytes aus Blob auslesen
Code:
Eventuell fällt dir ja ein Muster auf?
2690415= $00290D6F 101001000011010110111 1
$414486b7 80000000 01000001010001001000011010110111 10000000000000000000000000000000 3333333322222222111111110000000 0 77777777666666665555555544444444 33333333222222221111111100000000 2690414= $00290D6E 101001000011010110111 0 $414486B7 00000000 01000001010001001000011010110111 00000000000000000000000000000000 Das Teil als LitleEndian Int64 auslesen, ein bissl Bitschifting (SHR) und dann noch 'ne Maske (AND) drüber, um die zusätlichen Datenbits loszuwerden Durch die je 3 bösen Einsen würde ich aber so auf maximal mögliche 4 MB für die Dateien kommen. Müßte man mal noch mehr Testdaten haben, mit "viel" größeren und kleineren Dateien. (z.B. halb/doppelt so Großen) |
AW: Dateigröße in Bytes aus Blob auslesen
TBlobstream und Size ?
|
AW: Dateigröße in Bytes aus Blob auslesen
Ich habe weitere Dateien getestet:
1 byte große Datei ergab: 00 00 00 00 00 00 F0 3F 2.096.777 byte große Datei ergab: 00 00 00 00 89 FE 3F 41 eine doppelt so große Datei (4.193.554 bytes) ergab: 00 00 00 00 89 FE 4F 41 8.387.108 bytes 00 00 00 00 89 FE 5F 41 16.774.216 00 00 00 00 89 FE 6F 41 |
AW: Dateigröße in Bytes aus Blob auslesen
Noch eine Datei im Kilobytebereich wäre wohl ganz praktisch, aber bis jetzt zeigt sich schonmal ein böses Schema.
Die 11 höchsten Bits sind irgendwelche "Steuerinfos" und deine gewünschter Wert wird wohl so verschoben, daß das höchste gesetzte Bit bis dort ranverschoben wurde. Man weiß also wo genau die gesuchten Bits anfangen (eigentlich aufhören), aber bis wo hin es geht, ist nicht erkennbar (kein direkter Marker vorhanden). Und auch aus den 11 Bits kann man nix auslesen, denn z.B. 01000001010 kommt bei unterschiedlich langen Bitfolgen vor, wobei beim Letzten Wer auch noch ein Bit gedreht ist. :shock: Wenn ich mich jetzt nirgendwo vertippt, verrechnet oder verkopiert hab, also die Werte stimmen, dann war's das wohl, da zwar (fast) alle Bits deiner Zahl vorhanden und sogar uncodiert sind, aber ohne ein erkennbares Ende kann man damit nix anfangen.
Code:
3333333322 222222111111110000000 0
77777777666 666665555555544444444 33333333222222221111111100000000 2690415= $00290D6F 101001000011010110111 1 $414486b7 80000000 01000001010 001001000011010110111 10000000000000000000000000000000 2690414= $00290D6E 101001000011010110111 0 $414486B7 00000000 01000001010 001001000011010110111 00000000000000000000000000000000 1= $00000001 1 $3FF00000 00000000 00111111111 1000000000000000000000 0000000000000000000000000000000 2096777= $001FFE89 111111111111010001001 $403FFE89 00000000 01000000001 1111111111110100010010 0000000000000000000000000000000 4193554= $003FFD12 1111111111110100010010 $414FFE89 00000000 01000001010 0111111111110100010010 0000000000000000000000000000000 Edit > blöde Codeausrichtung ... also besser meinen Beitrag zitieren und dort drin nachsehn |
AW: Dateigröße in Bytes aus Blob auslesen
ich glaube ich habe es, kranke Idee ...
jepp, definitiv Double ....
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
const //s1:AnsiString=#$00#$00#$00#$00#$89#$FE#$3F#$41; //s1:AnsiString=#$00#$00#$00#$00#$00#$00#$F0#$3F; s1:AnsiString=#$00#$00#$00#$00#$89#$FE#$6F#$41; var i:Double; begin move(s1[1],i,8); Showmessage(FloatToStr(i)); end; |
AW: Dateigröße in Bytes aus Blob auslesen
Das wäre ja zu einfach :shock:
|
AW: Dateigröße in Bytes aus Blob auslesen
3 Vergleiche sollten als "Beweis" genügen ?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:04 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz