W porządku, przygotowałem trochę kodu, aby odwrócić szesnastkowe znaki w ramach zabawy, którą wymyśliłem.Co jest nie tak z moim algorytmem?
Oto co mam w tej chwili:
#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;
}
To działa dobrze dla większości wartości. Na przykład 0xA0 staje się 0x0A itd ...
Jednak nie gra się dobrze z wartościami zaczynającymi się na "F".
0xF1 staje 0x10
0xFF staje 0xF0
etc ...
Czy ktoś może wskazać mi w dobrym kierunku?
Potrzebujesz trochę miejsca na matematykę do pracy. użyj int dla aib, a nie char. Lub przełącz się na operacje bitowe (>><< i i |) zamiast operacji matematycznych. –
@KennyTM: prawdopodobnie masz na myśli 'putchar (cc >> 4 | (cc i 0xf) << 4);' – mjv
Jako dodatkowa uwaga: nie ma potrzeby odejmowania 'a' od' c' przed podzieleniem przez 16. 'b = c/16 "da dokładnie taki sam wynik. Tak właśnie działa podział liczb całkowitych w C. – AnT