Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1

    [c]Problema con 0x8000 e codice

    Ciao ragazzi, avrei bisogno di un aiuto!
    Sono un programmatore professionista di php, ma di C non conosco praticamente nulla!!
    Avrei bisogno di convertire questo codice in php :

    #include <stdio.h>
    #include <conio.h>

    char name[100];
    char serial[9];

    unsigned int serial1 = 0;
    unsigned int serial2 = 0;

    unsigned int esi = 0;
    unsigned int eax = 0;
    unsigned int ecx = 0;

    int main(){

    printf("name: ");
    gets(name);
    for (int i=0;name[i]!=0;i++)
    {
    serial1+=(name[i] * i);
    }
    for (int x=0;name[x]!=0;x++)
    {
    ecx=(name[x]<<8);
    for (int z=0;z<8;z++)
    {
    esi=eax;
    esi=esi^ecx;
    if ((esi & 0xFFFF)>=0x8000)
    {
    eax=eax+eax;
    eax=eax^0x1021;
    }
    else
    {
    eax=eax<<1;
    }
    ecx=ecx<<1;
    }
    }
    serial2=eax+0x63;
    serial2=serial2&0xFFFF;
    sprintf(serial, "%0.4X%0.4X", serial2, serial1);
    printf("serial: ");
    printf("%s",serial);
    printf("\n\npress any key to exit....");
    getch();
    }
    Ero quasi a metà dell'opera quando mi sono incappato qui :
    if ((esi & 0xFFFF)>=0x8000)
    in php 0x8000 non esiste!
    Inoltre, cosa significa il segno << in ecx=ecx<<1; e il segno ^ in eax=eax^0x1021;?
    Vi prego, rispondete!

    Grazie!

  2. #2
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    il "<<" è lo switch a sinistra di un byte

  3. #3
    Ehm...Ovvero?
    In php lo switch c'è, ma è tutt'altra cosa!
    Forse decrementa?

  4. #4
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    no.. è un'operazione binaria sui numeri in binario, in parole povere "trasla" a sinistra il numero
    in parole più povere
    codice:
    n<<m;
    
    equivale a: n * 2^m //il ^ è l'elevamento a potenza
    
    n>>m;
    
    equivale a: n/2^m

  5. #5
    Grazie per la risposta!
    Sai anche cosa vuol dire questa condizione?
    if ((esi & 0xFFFF)>=0x8000)

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Se la parte bassa di esi e' maggiore o uguale a 32768 ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Cosa vuoi intendere con "se la parte bassa"...
    Perdonatemi, ma non sono abituato a ragionare con il c...

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da ilnetsurfer
    Cosa vuoi intendere con "se la parte bassa"...
    Perdonatemi, ma non sono abituato a ragionare con il c...
    Non e' questione di C ... parliamo di rappresentazione binaria dei numeri interi ...

    esi e' un unsigned int, quindi un valore numerico intero senza segno a 32 bit.

    La parte bassa sono i primi 16 bit del valore (dal bit 0 al bit 15), la parte alta i rimanenti bit (dal 16 al 31) ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    E quindi, in php, se la variabile esi equivale al codice ottenuto, es 3h3h3k dovrei fare :
    if(substr(decbin($esi),0,16) <= 32768){
    codice...
    }

    La funzione decbin in php converte una stringa in binario...
    E poi c'è anche questa :
    esi=esi^ecx;
    Come potrei fare?Ho trovato su un sito che quell' ^ è un ex-or...

  10. #10
    Guarda che in PHP gli operatori bitwise (come &, ^, <<, eccetera) esistono eccome.
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.