Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: SheKeL_C$ en 30 Marzo 2016, 03:40 am



Título: Como implementar esta conversion?
Publicado por: SheKeL_C$ en 30 Marzo 2016, 03:40 am
No se como hacer este tipo de conversion.

Tengo una cadena que contiene caracteres en el sistema hexadecimal, me gustaria comprobar si esa cadena se corresponde a un array de bytes.

Código
  1. char *x = "00AC"
  2. char *y = "0CC0"
  3. byte z[] = {0x00, 0xAC};

En este ejemplo 'x' y 'z' serian iguales o equivalentes, miestras que 'y' no se corresponde con 'z'


Título: Re: Como implementar esta conversion?
Publicado por: crack81 en 30 Marzo 2016, 04:01 am
Hola exactamente que quieres hacer?

Quieres comparar si la cadena x o y corresponde a algun valor del arreglo z
ademas como definiste ese tipo byte segun yo tengo entendido el byte no existe en c o c++ y lo mas parecido en tamaño es un char

Hola como mencione arriba no se exactamente que quieres hacer pero intuyendo que quieres comparar las variables, una solucion podria ser:

Código
  1. #include <iostream>
  2. #include<ctype.h>
  3. using namespace std;
  4.  
  5. int main()
  6. {
  7.  
  8.    unsigned char x[]={0x00,0xAC};
  9.    unsigned char y[] ={0x0C,0xC0};
  10.    uint8_t z[] = {0x00, 0xAC}; //se puede simular ocmo unsigned char
  11.  
  12.    if(x[0]==z[0] && x[1]==z[1]) cout<<"son iguales"<<endl;
  13.    else cout<<"no son iguales"<<endl;
  14.  
  15.    return 0;
  16. }


De entrada por que el tamaño de las estructuras es diferente ya que el puntero x posee cuatro elementos encontra de el arreglo z  solo posee dos, como muestro en el codigo de arriba un equivalente de codigo a:
Código
  1. char *x = "00AC
es:
Código
  1. char x[]={'0','0','A','C'};
lo cual muestra que jamas podrian ser iguales.


PD: En C/C++ no existe el tipo de dato byte lo mas cercano es unsigned char
o utilizando la bibilioteca ctype.h puede especificar un tipo de dato de 8 bits sin signo que es el equivalente a 1 byte
Salutos..


Título: Re: Como implementar esta conversion?
Publicado por: SheKeL_C$ en 30 Marzo 2016, 04:24 am
Tengo un archivo que tiene unos bytes, estos bytes son 00 y AC.
Ahora tengo tengo estos punteros char '00AC' y '0CC0'.

Mi nivel de conocimientos de c o c++ son minimos.

Quiero comprobar que los bytes que tengo en memoria 00 y AC corresponden a unos caracteres ASCII que corresponden al los caracteres usados en el sistema hexadecimal?

 
Código
  1.    //                      00AC.txt    30h 30h 41h 43h
  2.    //                        --------      0    0h    A    Ch


Título: Re: Como implementar esta conversion?
Publicado por: crack81 en 30 Marzo 2016, 04:41 am
Supongamos  que tienes tus bytes 00 y AC  en tu archivo y los lees como numeros enteros y no como caracteres y los quieres comparar con tu puntero de char que ya tienes en tu programa en formato hexadecimal

Pues lo mas claro para mi es convierte esos punteros char en un valor entero y luego haces la comparacion:

Como en este ejemplo, la conversion la hago con una funcion llamada strtol que viene incluida en la biblioteca cstdlib referencia:http://www.cplusplus.com/reference/cstdlib/strtol/ (http://www.cplusplus.com/reference/cstdlib/strtol/)

Ejemplo:

Código
  1. #include <iostream>
  2. #include<ctype.h>
  3. #include <cstdlib>
  4. using namespace std;
  5.  
  6. int main()
  7. {
  8.  
  9.    const char* x="00AC";
  10.    uint8_t valor=(uint8_t)strtol(x,NULL,16);
  11.    uint8_t z =0x00AC;
  12.  
  13.    if(valor==z)cout<<"son iguales"<<endl;
  14.    else cout<<"son diferentes"<<endl;
  15.  
  16.    return 0;
  17. }
  18.  

Si hay dudas comenta
Saludos...


Título: Re: Como implementar esta conversion?
Publicado por: SheKeL_C$ en 30 Marzo 2016, 05:04 am
Supongamos  que tienes tus bytes 00 y AC  en tu archivo y los lees como numeros enteros y no como caracteres y los quieres comparar con tu puntero de char que ya tienes en tu programa en formato hexadecimal

Pues lo mas claro para mi es convierte esos punteros char en un valor entero y luego haces la comparacion:

Como en este ejemplo, la conversion la hago con una funcion llamada strtol que viene incluida en la biblioteca cstdlib referencia:http://www.cplusplus.com/reference/cstdlib/strtol/ (http://www.cplusplus.com/reference/cstdlib/strtol/)

Ejemplo:

Código
  1. #include <iostream>
  2. #include<ctype.h>
  3. #include <cstdlib>
  4. using namespace std;
  5.  
  6. int main()
  7. {
  8.  
  9.    const char* x="00AC";
  10.    uint8_t valor=(uint8_t)strtol(x,NULL,16);
  11.    uint8_t z =0x00AC;
  12.  
  13.    if(valor==z)cout<<"son iguales"<<endl;
  14.    else cout<<"son diferentes"<<endl;
  15.  
  16.    return 0;
  17. }
  18.  

Si hay dudas comenta
Saludos...

Gracias, ya esta.

La solucion era strtol


Título: Re: Como implementar esta conversion?
Publicado por: HardForo en 17 Abril 2016, 00:00 am
Voy a invadir el hilo para no abrir 8000000 millones ya que los estoy chequeando todos  ;D

Código
  1. char x[]={'0','0','A','C'};

Que seria eso ? que diferencia hay entre eso y ... ?

Código
  1. char x[]="00AC"


Es solo más azucar sintactica ?  veo se comportan igual

// Gracias