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