Byte to second - secondi trascorsi dal 2 gennaio 2000

di salvsena il
15 risposte
Salve,
ho un file binario che apro così:
Dim bytes() As Byte = File.ReadAllBytes("J:\00000001\BAK.QQ")
Avendo un tracciato di questo tipo:
Numero di record (i): 3B
Record data: 14B * i
Utente: 5B
Data e ora: 4B //How many seconds is it from 2nd January,2000.
Altre informazioni: 5B

Se ad esempio leggo i 4 bytes che identificano la data
bytes(8) bytes(9) bytes(10) bytes(11)

ottengo questi 4 valori 35 104 180 81

Che dovrebbe corrispondere ai secondi trascorsi dal 2 gennaio del 2000
La data dovrebbe essere 20/10/2018 10:51

Ma non riesco a capire come convertire i 4 byte nel numero dei secondi corretti che dovrebbero essere circa 594.064.440

Qualcuno riesce ad aiurtami ?

Grazie

15 Risposte

  • Strano che i byte non siano invertiti comunque

    35×16777216+104×65536+180×256+81
  • Grazie mille, funziona alla grande !!
  • oregon ha scritto:


    Strano che i byte non siano invertiti comunque

    35×16777216+104×65536+180×256+81
    che sarebbe 35 × 12^24 + 104 × 2^16 + 180 × 2^8 + 81
  • Adesso approfitto ancora della vostra conoscenza perchè mi sono arenato di nuovo:

    Il passo successivo è questo che leggo sul tracciato:

    The length of the password+password: 3B
    // The first bytes's higher 4 bits are the length of the password. If the staffer does not have a password,it is "ffffff".

    Card number: 3B
    //If the staffer does not have the card number, it is "ffffff".

    Name: 10B questo però è un valore che deve diventare alfanumerico

    64 0 4 210 0 40 52 42 0 83 0 101 0 110 0 97

    Come dovrei procedere ?

    Non capisco questo: The first bytes's higher 4 bits are the length of the password.

    Grazie
  • I primi 3 byte (lunghezza password) in esadecimale sono 40 00 04
    Devi tenere presente solo la prima cifra esadecimale (higher 4 bits) del primo byte (first byte) ovvero il 4 di 40. Quindi la password sarà di 4 caratteri.
    Penso che la password sia in Unicode (2 byte per carattere) e i caratteri significativi potrebbero essere 83 101 110 97 tradotti in ASCII

    Sena
  • Ti posso dire con certezza che la password è 1234 e card number è 2634794

    come faccio a risalire ?
  • 40 52 42 corrisponde a quel valore ( fai tu i calcoli come prima considerando che manca la parte più grande ).

    Prima si continuare, di cosa stiamo parlando? Che dati sono?
  • Ok grazie, in pratica devo effettuare importazioni ed esportazioni verso un marcatempo presenze per i dipendenti, per problemi logistici l'unica maniera per effettuare scambio dati è tramite una pendrive per cui devo leggere e scrivere file binari secondo un tracciato definito

    Dovendo fare anche l'inverso in fase dio esportazione, come faccio poi a trasformare l'inverso ?
    Ovvero portare 1234 in 40 52 42 ?

    Grazie ancora
  • No ... il valore 2634794 è 40 52 42 non la password.

    Sulla password non entro nel merito perché non mi piace entrare in questi contesti non potendo controllare di persona.

    La conversione contraria la fai con delle semplici divisioni, dai ci puoi riuscire anche da solo...
  • Ioparlavo della password in pratica 64 0 4 210

    LenPWD = Hex$(CLng(Asc(64))) ' valore che non uso ma serve quando devo scrivere il bin
    PWD1 = CLng(Asc(4)) * 256
    PWD2 = CLng(Asc(210))
    PWD = PWD1 + PWD2

    PWD= 1234

    Adesso devo fare anche l'inverso
    Come riportare 1234 a 64 0 4 210 ??

    Tu dici con le divisioni dovrei riuscirci ?
  • Per il 64 basta dividere per 16 o moltiplicare per 16

    Per il resto è una serie di divisioni e valutazioni del resto ... mi sembra troppo semplice perché tu non possa arrivarci da solo
  • Perdonatemi non sapevo fosse vietato chiedere consiglio a 2 community, non comprendo il motivo, ma chiedo scusa comunque, neanche conoscevo il termine crossposting ....
  • Nessuno lo sa se non si legge il regolamento. In genere si fa prima di usare un forum.

    Comunque, per chiudere, le semplici operazioni sono
    
            Dim p As Long = 1234
    
            Dim b0 As Byte = p.ToString().Length * 16
            Dim b1 As Byte = p \ 65536
            Dim m1 As Long = p Mod 65536
            Dim b2 As Byte = m1 \ 256
            Dim b3 As Byte = m1 Mod 256
    
    e i valori saranno in b0 b1 b2 b3
Devi accedere o registrarti per scrivere nel forum
15 risposte