Hikdivision DVR cihazının (modelini hatırlamıyorum) kayıt yaptığı sabit diskin birebir kopyası içerisinde kayıtların başlangıç ve bitiş tarihlerini tersine mühendislik yaparak bulmuştum. Kayıtların tarihlerinin bulunduğu ilk satırda hexadecimal sistemde şu veriler vardı. Örnek:
04 98 42 4E 80 AC 42 4E 4A 00 00 00 0A
Bu örnek veri bir kayıta ait başlangıç ve bitiş tarihi, kamera no ve kaydın tutulduğu dosya adı bilgilerini tutuyor. Buna göre gerekli parse işlemleri sonunda;
kodlar aşağıdadır:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
namespace WindowsFormsApplication2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
string ReverseString(string str)
{
//str katar
//01234567 01234567
//0498424E 4E429804
char[] katar = new char[str.Length];
for (int i = 0; i < str.Length/2; i++)
{
katar[2 * i] = str[str.Length - 2*i - 2];
katar[2 * i + 1] = str[str.Length - 2*i-1];
}
return new string(katar);
}
private void button1_Click(object sender, EventArgs e)
{
string baslama, bitis, dosyano, kamera;
string satir = "";
StreamReader st = new StreamReader("dosya.txt");
while ((satir=st.ReadLine())!=null)
{
satir = satir.Replace(" ", "");
baslama = satir.Substring(0, 8);
baslama = ReverseString(baslama);
int sayi=int.Parse(baslama, System.Globalization.NumberStyles.HexNumber);
textBox1.Text = ConvertFromUnixTimestamp((double)sayi).ToString();
bitis = satir.Substring(8, 8);
bitis = ReverseString(bitis);
sayi = int.Parse(bitis, System.Globalization.NumberStyles.HexNumber);
textBox2.Text = ConvertFromUnixTimestamp((double)sayi).ToString();
dosyano = satir.Substring(16, 8);
dosyano = ReverseString(dosyano);
sayi = int.Parse(dosyano, System.Globalization.NumberStyles.HexNumber);
textBox3.Text = "hik"+sayi.ToString();
kamera = satir.Substring(24, 2);
kamera = ReverseString(kamera);
sayi = int.Parse(kamera, System.Globalization.NumberStyles.HexNumber);
textBox4.Text = sayi.ToString();
}
st.Close();
}
DateTime ConvertFromUnixTimestamp(double timestamp)
{
DateTime origin = new DateTime(1970, 1, 1, 0, 0, 0, 0);
return origin.AddSeconds(timestamp);
}
double ConvertToUnixTimestamp(DateTime date)
{
DateTime origin = new DateTime(1970, 1, 1, 0, 0, 0, 0);
TimeSpan diff = date - origin;
return Math.Floor(diff.TotalSeconds);
}
}
}