Advertisement
Korobka887

T02D04Q2

Mar 2nd, 2023
674
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.40 KB | None | 0 0
  1. #include <stdio.h>
  2.  
  3. int in_range(int num, int fpos, int spos) {
  4.     return (num >= fpos && num <= spos ? 1 : 0);
  5. }
  6.  
  7. void to_hex(int ascii) {
  8.     char a = (char)(ascii / 16 + 48), b;
  9.  
  10.     if (ascii % 16 < 10) {
  11.         b = (char)(ascii % 16 + 48);
  12.     } else {
  13.         switch (ascii % 16) {
  14.             case 10:
  15.                 b = 'A';
  16.                 break;
  17.             case 11:
  18.                 b = 'B';
  19.                 break;
  20.             case 12:
  21.                 b = 'C';
  22.                 break;
  23.             case 13:
  24.                 b = 'D';
  25.                 break;
  26.             case 14:
  27.                 b = 'E';
  28.                 break;
  29.             case 15:
  30.                 b = 'F';
  31.                 break;
  32.         }
  33.     }
  34.  
  35.     printf("%c%c", a, b);
  36. }
  37.  
  38. int ascii_from_hex(char a, char b) {
  39.     int ascii = 0;
  40.  
  41.     if (in_range((int)a, 49, 57)) {
  42.         ascii += ((int)a - 48) * 16;
  43.     } else if (in_range((int)a, 65, 70)) {
  44.         ascii += ((int)a - 55) * 16;
  45.     }
  46.  
  47.     if (in_range((int)b, 49, 57)) {
  48.         ascii += ((int)b - 48);
  49.     } else if (in_range((int)b, 65, 70)) {
  50.         ascii += ((int)b - 55);
  51.     }
  52.  
  53.     return ascii;
  54. }
  55.  
  56. int main(int argc, char * argv[]) {
  57.     if ((int)argv[argc-1][0] == (int)'0') {
  58.         char word, space;
  59.  
  60.         scanf("%c%c", &word, &space);
  61.         if (in_range((int)word, 65, 90) && space == ' ') {
  62.             to_hex((int)word);
  63.         } else {
  64.             printf("n/a");
  65.             space = '\n';
  66.         }
  67.  
  68.         while (space != '\n') {
  69.             scanf("%c%c", &word, &space);
  70.             if (in_range((int)word, 65, 90) && (space == ' ' || space == '\n')) {
  71.                 printf(" ");
  72.                 to_hex((int)word);
  73.             } else {
  74.                 printf("n/a");
  75.                 space = '\n';
  76.             }
  77.         }
  78.     } else if ((int)argv[argc-1][0] == (int)'1') {
  79.         char a = ' ', b = ' ', c = ' ';
  80.         while (a != '\n' && b != '\n' && c != '\n') {
  81.             scanf("%c%c%c", &a, &b, &c);
  82.             if ((in_range((int)a, 49, 57) == 1) || (in_range((int)a, 65, 70) == 1) && (in_range((int)b, 49, 57) == 1) || (in_range((int)b, 65, 70) == 1) && ((c == '\n') || (c == ' '))) {
  83.                 printf("%c", (char)ascii_from_hex(a, b));
  84.             }
  85.             if (c != '\n') {
  86.                 printf(" ");
  87.             }
  88.  
  89.         }
  90.     } else {
  91.         printf("n/a");
  92.     }
  93.     return 0;
  94. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement