Como implementar esta conversion?

Iniciado por SheKeL_C$, 30 Marzo 2016, 03:40 AM

0 Miembros y 1 Visitante están viendo este tema.

SheKeL_C$

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 (cpp) [Seleccionar]
char *x = "00AC"
char *y = "0CC0"
byte z[] = {0x00, 0xAC};


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

crack81

#1
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 (cpp) [Seleccionar]
#include <iostream>
#include<ctype.h>
using namespace std;

int main()
{

    unsigned char x[]={0x00,0xAC};
    unsigned char y[] ={0x0C,0xC0};
    uint8_t z[] = {0x00, 0xAC}; //se puede simular ocmo unsigned char

    if(x[0]==z[0] && x[1]==z[1]) cout<<"son iguales"<<endl;
    else cout<<"no son iguales"<<endl;

    return 0;
}



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 (cpp) [Seleccionar]
char *x = "00AC es:
Código (cpp) [Seleccionar]
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..
Si C/C++ es el padre de los lenguajes entonces ASM es dios.

SheKeL_C$

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 (cpp) [Seleccionar]
   //                      00AC.txt    30h 30h 41h 43h
   //                        --------      0    0h    A    Ch

crack81

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/

Ejemplo:

Código (cpp) [Seleccionar]
#include <iostream>
#include<ctype.h>
#include <cstdlib>
using namespace std;

int main()
{

    const char* x="00AC";
    uint8_t valor=(uint8_t)strtol(x,NULL,16);
    uint8_t z =0x00AC;

    if(valor==z)cout<<"son iguales"<<endl;
    else cout<<"son diferentes"<<endl;

    return 0;
}


Si hay dudas comenta
Saludos...
Si C/C++ es el padre de los lenguajes entonces ASM es dios.

SheKeL_C$

Cita de: 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/

Ejemplo:

Código (cpp) [Seleccionar]
#include <iostream>
#include<ctype.h>
#include <cstdlib>
using namespace std;

int main()
{

    const char* x="00AC";
    uint8_t valor=(uint8_t)strtol(x,NULL,16);
    uint8_t z =0x00AC;

    if(valor==z)cout<<"son iguales"<<endl;
    else cout<<"son diferentes"<<endl;

    return 0;
}


Si hay dudas comenta
Saludos...

Gracias, ya esta.

La solucion era strtol

HardForo

#5
Voy a invadir el hilo para no abrir 8000000 millones ya que los estoy chequeando todos  ;D


char x[]={'0','0','A','C'};


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


 char x[]="00AC"



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

// Gracias
HardForo:  foro de Hardware y programación

Se buscan Mods y colaboradores *