![]() |
Skype Timestamp format
Dies ist der Auszug aus einer chatmsg256.dbb. Gelistet ist hier genau ein Record der Länge 264 Bytes.
6C 33 33 6C 93 00 00 00 16 00 00 00 41 0C 00 09 09 03 E0 03 23 6D 61 72 63 75 73 68 61 73 73 6D 61 6E 6E 2F 24 61 7A 61 6C 69 73 38 33 3B 62 62 30 33 62 38 66 35 39 64 65 39 36 63 39 34 00 00 E5 03 BD A8 88 CF 04 03 E8 03 6D 61 72 63 75 73 68 61 73 73 6D 61 6E 6E 00 03 EC 03 6D 61 72 63 75 73 68 61 73 73 6D 61 6E 6E 00 00 81 04 02 00 0B A3 EB AA E5 04 00 07 D7 B2 AB 48 03 FC 03 6A 75 68 75 00 00 F1 03 03 00 03 A3 EB AA E5 04 03 D8 18 61 7A 61 6C 69 73 38 33 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 Der Timestamp steht an Offset 66 (davor stehen die drei bytes 00 E5 03) Es handelt sich hier also um die Werte BD A8 88 CF 04. Laut dieser ![]() Hat jemand eine Idee? Meines Wissens ist Skype ja auch mit Delphi geschrieben. Warum sollten die Entwickler vom Standard TDateTime Wert Handling abweichen? Ich frage mich also ob die Angaben in dem genannten PDF stimmen. |
Re: Skype Timestamp format
Da steht doch:
Zitat:
Evtl. sind die Bytes auch umgedrecht - weil das hinterste rote Byte vorne ein 0-Nibble hat isses wahrscheinlich das erste Bytes des Zeitstempels ;) Warum die Entwickler davon abweichen kann viele Gründe haben. Einer ist vielleicht, dass es andere nicht so einfach haben, die Daten auszulesen ;) Probiers mal so in etwa: (Daten aus deiner Datei genommen) Wert: Cardinal = 0; Wert := Wert or BD; Wert := Wert or A8 shl 7; Wert := Wert or 88 shl 14; Wert := Wert or CF shl 21; Wert := Wert or 04 shl 28; Zeit : TDatetime = UnixToDatetime(Wert); |
Re: Skype Timestamp format
Das Format sieht nach folgender "Idee" aus:
7 Bits Daten 1 Bit (MSB) Flag (1 = ein weiteres Byte einlesen) So lassen sich kleine Integer-Werte platzsparend speichern (0..127 = 1 Byte). Beispiel zum Lesen eines 32-Bit Integers (mit Datenzeiger und (restlicher) Datengröße als Parameter):
Delphi-Quellcode:
function ReadLong(var AData: Pointer; var ASize: Cardinal): LongWord;
var Index: Integer; Value: Byte; begin Result := 0; Index := 0; repeat if ASize = 0 then raise EReadError.CreateRes(PResStringRec(@SReadError)); Value := PByte(AData)^; if (Value and $7F) <> 0 then begin if (Index >= 32) or ((Index >= 28) and ((Value and $70) <> 0)) then raise EIntOverflow.CreateRes(PResStringRec(@SIntOverflow)); Inc(Result, (Value and $7F) shl Index); end; Inc(Index, 7); Inc(PByte(AData)); Dec(ASize); until Value and $80 = 0; end; |
Re: Skype Timestamp format
Zitat:
![]() |
Re: Skype Timestamp format
Zitat:
|
Re: Skype Timestamp format
danke erst einmal für die hinweise.
ich hoffe ich komme am wochenende mal dazu mir das genauer anzusehen. grüße an dich nico(dex) - lang nix mehr voneinander gehört :hi: |
Re: Skype Timestamp format
okay, ich habe den richtigen wert auslesen können.
vielen dank an alle. |
Re: Skype Timestamp format
Zitat:
Zitat:
|
Re: Skype Timestamp format
ChatMsg***.dbb Dateien habe ich damit erledigt, am Wochenende auch die Transfer***.dbb Dateien.
Es läuft also :-) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:56 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