Dudas con hexadecimal

Iniciado por martinanonymo, Agosto 06, 2015, 01:43:30 AM

Tema anterior - Siguiente tema

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

Agosto 06, 2015, 01:43:30 AM Ultima modificación: Agosto 06, 2015, 01:56:41 AM por Gabriela
Hola al todo el foro, hoy les vengo con una consulta que para algunos les sera muy fácil de resolver, pero ami me tiene dando vueltas. Resulta que hace unos días entre a una página y me daba un cálculo para resolver que era el siguiente:

"Dada la siguiente lista de enteros hexadecimales (indexada desde 1):
0x44 0x4d 0x6a 0x76 0x47 0x48 0x76 0x4a 0x63 0x4b 0x75 0x48 0x42 0x71 0x66 0x49 0x65 0x59 0x6c 0x6e 0x78 0x62 0x54 0x4e 0x77 0x48 0x66 0x62 0x69 0x52 0x47 0x56 0x4b 0x55 0x78 0x46 0x53 0x65 0x73 0x62 0x73 0x48 0x63 0x45 0x79 0x4c 0x4c 0x76 0x6a 0x6b 0x59 0x74 0x78 0x4c 0x6b 0x65 0x4c 0x45 0x58 0x74 0x4f 0x6d 0x56 0x66 0x6c 0x48 0x78 0x67 0x42 0x50 0x76 0x68 0x56 0x44 0x65 0x6f 0x4b 0x63 0x73 0x77 0x4c 0x6a 0x67 0x71 0x73 0x73 0x48 0x6a 0x77 0x6a 0x6f 0x66 0x50 0x6c 0x68 0x71
Sumarle 1 a las posiciones pares y restarle 1 a las posiciones impares. Luego pasar los enteros a su código ascii correspondiente para obtener la respuesta."


El tema de hexa y ascii lo tengo bastante claro su funcionamiento, etc. pero no logro entender algunas cosas, si alguien es tan amable de explicarme como puedo resolver esto seria de mucha ayuda!
Para ganar hay que arriesgar

Cual es tú duda, la suma entre hexadecimales, convertilos a decimales??

Amigo pero si está chupado es que no utilizamos para nada la materia gris. A parte no has explicado como quieres hacerlo si manual o haciendo algún programita.

Mira el primer valor hexadecimal 0x44  tiene como valor decimal 68 como dices que a los pares hay que sumarle uno pues nos queda 69

69 en Ascii es igual a E.

Como puedes apreciar no tiene dificultal yo si tuviera que hacerlo en java meteria esos datos en un String, después haría un split de espacios vacios "\\s"
y los metería en una String Array, acto seguido haría un bucle for hasta los arrays.length y mientras que fuera leyéndome cada array colocaría con un Substring para que leyera sólo a partir de 0x es decir que leyera el 44 acto seguido lo pasaría a decimal, si es par +1 si es impar -1 y a continuación lo pasaría a char y lo sacaría con un system.out.println para ver el resultado.

Esto es más o menos como lo haría yo pero es de suponer que habrán mejores formas de hacerlo.

Amigo como consejo te digo que si te gusta este mundillo como me gusta a mí ,te aconsejo que muevas la materia gris es la única forma de avanzar, para avanzar y aprender se hace con los retos personales y en este camino es donde se van quedando las experiencias.

Si esperas que te solucionen los problemas que se te planteen y ser un copy/paste en tu vida mejor que te dediques a otra cosa
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Amigo pero si está chupado es que no utilizamos para nada la materia gris. A parte no has explicado como quieres hacerlo si manual o haciendo algún programita.

Mira el primer valor hexadecimal 0x44  tiene como valor decimal 68 como dices que a los pares hay que sumarle uno pues nos queda 69

69 en Ascii es igual a E.

Como puedes apreciar no tiene dificultal yo si tuviera que hacerlo en java meteria esos datos en un String, después haría un split de espacios vacios "\\s"
y los metería en una String Array, acto seguido haría un bucle for hasta los arrays.length y mientras que fuera leyéndome cada array colocaría con un Substring para que leyera sólo a partir de 0x es decir que leyera el 44 acto seguido lo pasaría a decimal, si es par +1 si es impar -1 y a continuación lo pasaría a char y lo sacaría con un system.out.println para ver el resultado.

Esto es más o menos como lo haría yo pero es de suponer que habrán mejores formas de hacerlo.

Amigo como consejo te digo que si te gusta este mundillo como me gusta a mí ,te aconsejo que muevas la materia gris es la única forma de avanzar, para avanzar y aprender se hace con los retos personales y en este camino es donde se van quedando las experiencias.

Si esperas que te solucionen los problemas que se te planteen y ser un copy/paste en tu vida mejor que te dediques a otra cosa
me parece que tienes un grave problema de interpretación de lectura, como me consejas que use la materia gris, yo te aconsejo que leas mejor, nunca pedí que me lo resuelvan, te explico, como a vos una profesora te explica como hacer un ejercicio de matemática para que después puedas hacer todos los demás, yo simplemente pedí que me expliquen como puedo hacer el siguiente ejercicio, nunca pretendí hacer un copy/paste, no metas palabras en mi boca que jamas dije/escribí. Así que antes de escribir, con todo mi respeto y sin insultar te pido que no comentes, porque me parece bastante agrandado decir lo que me dijiste y mucho menos sin conocerme, saludos!
Para ganar hay que arriesgar

Estimado amigo no quiero que te ofendas aquí somos una familia  e intentamos de ayudar en la medida de lo posible a todos, pero sigo pensando lo mismo.

Con esto que pusiste:

Hola al todo el foro, hoy les vengo con una consulta que para algunos les sera muy fácil de resolver, pero ami me tiene dando vueltas

Con ese comentario yo interpreto lo siquiente:

"No doy pie con bola a ver si alguien me lo soluciona"

No quiero crear enemistad contigo, pero sigo pensando que para evolucionar hay que enfrentarse a los problemas de cara, yo lo hago  todos los días de mi vida.

Si he interpretado mal tu pregunta te pido disculpas si llevo razón en mi interpretación medita sobre lo que te he dicho, quizás pueda ser productivo.

Salu2
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

y claro amigo, para algunos le puede ser mas fácil solucionar que para otros, si vos no podes solucionar el problema, mucho menos me lo vas a poder explicar, eso mismo que me citaste fue simplemente un comentario sin valor alguno, ademas convengamos que es un simple problema de lógica, tampoco que es algo super importante que si no lo soluciono yo solo voy a ser un fracaso en mi vida. Saludos!
Para ganar hay que arriesgar

Quize responder el mismo  problema, pero aún me sigue diciendo que es la respuesta incorrecta,
este es mi codigo: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Si encuentrar alguna falla, avisan, saludos.

Hola @martinanonymo  ;) , soy Yavi.

Basando me en el código que publicó @Jochee y luego de corregir el error simple que tenia saqué un ejemplar del mismo. Si lo quieres ver directo solo verlo y deja así, pero me tomaré la molestia de contarte algo más. Antes que esto, añado que también tome como base la idea de @Hu3c0  :D

código
Código: java

import java.util.Scanner;

public class script {
  public static void main(String[] args) {
    System.out.println("Iniciando..");

    //vamos a lo que vinimos

    Scanner scan = new Scanner(System.in);
    System.out.print("Escriba el HEX: ");

    String hex = scan.nextLine();
    String [] arr = hex.split(" ");

    String num [] = new String [arr.length];
        for(int i = 0; i < num.length;i++){
            int he = Integer.decode(arr[i]);
            if(he%2 == 0){
                num[i] = Integer.toHexString(he+1);
            }else{
                num[i] = Integer.toHexString(he-1);
            }
            System.out.print((char)Integer.parseInt(num[i], 16));
        }
        System.out.println("");
  }
}



Bueno, básicamente leemos el teclado:

Código: java

Scanner scan = new Scanner(System.in);
    System.out.print("Escriba el HEX: ");


y nos ayudamos de un par de array-vector-arreglo (como se llame). Y un for para leer carácter a carácter sin incluir los espacios:

Código: java

for(int i = 0; i < num.length;i++){
            int he = Integer.decode(arr[i]);
            if(he%2 == 0){
                num[i] = Integer.toHexString(he+1);
            }else{
                num[i] = Integer.toHexString(he-1);
            }
            System.out.print((char)Integer.parseInt(num[i], 16));
        }


Podemos ver como pasamos a entero y luego comprobamos si es par o impar con el if.  Luego lo volvemos a codificar en hexadecimal:

Código: java

num[i] = Integer.toHexString(he+1);
// o en cambio
num[i] = Integer.toHexString(he+1);


y finalizando el for lo imprimimos todo.

¿Cómo se comprobó que estaba bien?

para esto tome dos dígitos: 0x44 0x4d , cada uno pasado a entero con el método int(String, base) de python obtuve los valores 68 77

Código: python

primero = int("0x44", 16)

segundo = int("0x4d", 16)


Luego le sume o reste dependiendo la condición del problema y obtuve los valores 69 76
para finalmente pasarlo a su correspondiente carácter: E L

Código: python

chr(69)
chr(76)

"Eso es lo bueno de internet. De que sirve internet si chateas con tus vecinos??? para eso te sacas unas sillas al fresco y hablais y jugais a las cartas". @windux