Я пытаюсь преобразовать строку ascii в двоичную строку в C. Я нашел этот пример Converting Ascii to binary in C, но я скорее не использую рекурсивную функцию. Я попытался написать итеративную функцию в отличие от рекурсивной функции, но в двоичной строке отсутствует ведущая цифра. Я использую itoa
для преобразования строки, однако itoa
является нестандартной функцией, поэтому я использовал реализацию от What is the proper way of implementing a good "itoa()" function?, предоставленной Minh Nguyen.Как преобразовать строку ascii в двоичную?
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
int32_t ascii_to_binary(char *input, char **out, uint64_t len)
{
uint32_t i;
uint32_t str_len = len * 8;
if(len == 0)
{
printf("Length argument is zero\n");
return (-1);
}
(*out) = malloc(str_len + 1);
if((*out) == NULL)
{
printf("Can't allocate binary string: %s\n", strerror(errno));
return (-1);
}
if(memset((*out), 0, (str_len)) == NULL)
{
printf("Can't initialize memory to zero: %s\n", strerror(errno));
return (-1);
}
for(i = 0; i < len; i++)
itoa((int32_t)input[i], &(*out)[(i * 8)], 2);
(*out)[str_len] = '\0';
return (str_len);
}
int main(void)
{
int32_t rtrn = 0;
char *buffer = NULL;
rtrn = ascii_to_binary("a", &buffer, 1);
if(rtrn < 0)
{
printf("Can't convert string\n");
return (-1);
}
printf("str: %s\n", buffer);
return (0);
}
я 1100001
для символов ASCII a
, но я должен получить 01100001
, так как преобразовать строку ASCII в целом двоичной строки?
Просто комментарий: вам не нужно, чтобы проверить результат 'memset'. –
'itoa' не передает ведущие нули. Например, с базой 10 вы никогда не получите '097'. – usr2564301
@ Ян Эбботт, спасибо, что вам интересно. – 2trill2spill