#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> .