Как выполнить побитовые операции в C и вывести результат на экран? - PullRequest
0 голосов
/ 14 апреля 2019

Я пытаюсь создать программу, которая отображает на экране пошаговые процедуры для кодирования строки в base64, следуя приведенному объяснению на https://daemoniolabs.wordpress.com/2011/09/09/codificacao-base64-em-c/. Я застрял в битовой операции И.

Как я уже сказал, я следую учебному пособию по ссылке выше, но не могу найти никакого ответа на этот конкретный шаг.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


#define NUMBER_OF_ARGUMENTS             2
#define EOS                     '\0'

#define BASE_64                               "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"


#define OK                      0
#define INVALID_NUMBER_OF_ARGUMENTS         1



int
main(int argc, char **argv)
{

  unsigned result, remainder, argument, auxiliary;
  unsigned characterIndex;
  char *chain, *b1, *b2, *b3 /* *c1 *c2, *c3, *c4 */;



  chain = (char *) malloc(sizeof(char *));
  b1 = (char *) malloc(sizeof(char *)); 
  b2 = (char *) malloc(sizeof(char *));
  b3 = (char *) malloc(sizeof(char *));
  /* c1 = (char *) malloc(sizeof(char *)); */
  /* c2 = (char *) malloc(sizeof(char *)); */
  /* c3 = (char *) malloc(sizeof(char *)); */
  /* c4 = (char *) malloc(sizeof(char *)); */



  result = 0;
  auxiliary = 1;




  if (argc != NUMBER_OF_ARGUMENTS)
  {
    printf("\n\n\nError #%i: invalid number of arguments.\n", INVALID_NUMBER_OF_ARGUMENTS);
    printf("Uso: %s <string>\n\n\n\n", *argv);
    exit(INVALID_NUMBER_OF_ARGUMENTS);  /* Abort. */
  } /* if */



  for (characterIndex = 0; *(*(argv + 1) + characterIndex) != EOS; characterIndex++)
  {

    argument = *(*(argv + 1) + characterIndex);

    while (argument > 0)
    {
      remainder = argument % 2;
      result = result + (auxiliary * remainder);
      argument = argument / 2;
      auxiliary = auxiliary * 10;
    } /* while */

    sprintf(chain + strlen(chain), "%08u", result);

    result = 0;
    auxiliary = 1; 
  } /* for */


  printf("\n\n\n%s\n\n\n\n", chain);



  strncpy(b1, chain, 8);
  *(b1 + 8) = EOS;


  strncpy(b2, (chain + 8), 8);
  *(b2 + 8) = EOS;


  strncpy(b3, (chain + 16), 8);
  *(b3 + 8) = EOS;


  printf("%s\n", b1);
  printf("11111100 &\n");
  printf("--------\n");
  printf("01100000\n\n\n\n");  /* I've stucked here. */

  /* *c1 = (*b1 & 0xFC); 
     printf("%s\n\n\n\n", c1); */



  printf("%s\n\n\n\n", b2);

  printf("%s\n\n\n\n", b3);




  return OK;

}

Я ожидал напечатать на экране результат побитовой операции И, но только достиг своей цели, написав нужное число внутри функции printf.

...