Muy bien, he preparado un código para invertir los caracteres hexadecimales como parte de un ejercicio divertido que inventé.¿Qué hay de malo con mi algoritmo?
Aquí es lo que tengo en este momento:
#include <stdio.h>
int main() {
char a,b,c;
while (1) {
c = getchar();
if (!feof(stdin)) {
a = c % 16;
b = (c - a)/16;
c = (a*16) + b;
putchar(c);
}else{break;}
}
return 0;
}
Funciona bien para la mayoría de los valores. Por ejemplo, 0xA0 se convierte en 0x0A, etc. ...
Sin embargo, no está funcionando bien con valores que comienzan con 'F'.
0xf1 convierte 0x10
0xFF se convierte en 0xF0
etc ...
Puede alguien me punto en la dirección correcta?
necesita espacio para que sus matemáticas funcionen. usa int para a y b en lugar de char. O cambie a usar operaciones bit a bit (>><< & y |) en lugar de operaciones matemáticas. –
@KennyTM: probablemente quiera decir 'putchar (cc >> 4 | (cc & 0xf) << 4);' – mjv
Como nota adicional: no hay necesidad de restar 'a' de' c' antes de dividir por 16. 'b = c/16' le dará exactamente el mismo resultado. Así es como funciona la división de enteros en C. – AnT