Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <string.h>
- int char_to_digit(char x) {
- if(x >= '0' && x <= '9')
- return x - '0';
- if(x >= 'a' && x <= 'f')
- return 10 + x - 'a';
- return 0;
- }
- int parse_base(char str[], int s_i, int s_e, int base = 10) {
- int i, cif, nr = 0;
- for(i = s_i; i < s_e; i++) {
- nr = nr * base + char_to_digit(str[i]);
- }
- return nr;
- }
- int main(){
- char s[] = "105 117 20 163 117 6e 164 32 20 163 116 75 144 101 6e 164\n";
- int i;
- int s_i = 0;
- int e_i = 0;
- int nr_num = 0;
- int base;
- char decoded_char;
- while(1) {
- while(s[e_i] != ' ' && s[e_i] != NULL && s[e_i] != '\n') {
- e_i ++;
- }
- // Gata, am mers până când e_i e primul spațiu (sau enter sau capăt).
- // Deci numărul începe de la s_i până la e_i
- // Acum trebuie să încercăm să-l decodăm
- if(nr_num % 3 == 0) base = 8;
- else if(nr_num % 3 == 1) base = 10;
- else base = 16;
- // Luăm numărul decodat și îl punem într-un char
- // (deci va fi interpretat ca un caracter)
- decoded_char = parse_base(s, s_i, e_i, base);
- // Îl afișăm
- printf("%c", decoded_char);
- // Dacă am ajuns la \n sau la NULL, s-a terminat linia
- if(s[e_i] == '\n' || s[e_i] == NULL) break;
- // Dacă nu, trecem la următorul număr
- s_i = e_i + 1;
- e_i = s_i;
- nr_num += 1;
- }
- printf("\n");
- }
Add Comment
Please, Sign In to add comment