Как выполнять побитовые операции на C и выводить результат на экран?

#c #base64 #bitwise-operators

#c #base64 #побитовые операторы

Вопрос:

Я пытаюсь создать программу, которая показывает на экране пошаговые процедуры для кодирования строки в 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                     ''

#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("nnnError #%i: invalid number of arguments.n", INVALID_NUMBER_OF_ARGUMENTS);
    printf("Uso: %s <string>nnnn", *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), "u", result);

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


  printf("nnn%snnnn", 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("%sn", b1);
  printf("11111100 amp;n");
  printf("--------n");
  printf("01100000nnnn");  /* I've stucked here. */

  /* *c1 = (*b1 amp; 0xFC); 
     printf("%snnnn", c1); */



  printf("%snnnn", b2);

  printf("%snnnn", b3);




  return OK;

}
  

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

Комментарии:

1. Итак… вы хотите знать, как напечатать символ в двоичном формате?

2. Вот быстрый макрос, который должен работать (при условии, что вы используете практически любой компилятор, не выпущенный Microsoft) для любого типа : #define PRINT_BINARY(v) (__extension__ ({ for (size_t i = 0 ; i < (sizeof(v) * CHAR_BIT) ; i ) putchar(((v >> ((sizeof(v) * CHAR_BIT) - 1 - i)) amp; 1) '0'); putchar('n'); })) . Убедитесь, что <limits.h> и <stdio.h> .