在c语言中如何将字符数组转换为二进制,反之亦然

在c语言中如何将字符数组转换为二进制,反之亦然,c,multidimensional-array,binary,C,Multidimensional Array,Binary,我正在尝试将一个字符串,例如(LOCL)转换为二进制并返回到字符串。虽然我的剧本似乎很好,但我无法解决最后一部分。我已经成功地一个接一个地正确转换了字符。我找不到连接它们的方法,因为它们不是整数或字符串,而是字符。我试图将它们从int转换为字符串,但没有成功。我尝试了相反的方法,得到了纯整数。我错在哪里了?我错过了什么这么重要 #include <stdio.h> #include <string.h> #include <stdlib.h> #define

我正在尝试将一个字符串,例如(LOCL)转换为二进制并返回到字符串。虽然我的剧本似乎很好,但我无法解决最后一部分。我已经成功地一个接一个地正确转换了字符。我找不到连接它们的方法,因为它们不是整数或字符串,而是字符。我试图将它们从int转换为字符串,但没有成功。我尝试了相反的方法,得到了纯整数。我错在哪里了?我错过了什么这么重要

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

#define MAX_CHARACTERS 32

typedef struct rec {
  char process[MAX_CHARACTERS];
}RECORD;

char b2c(char *s); /* Define funcrion */

char b2c(char *s) {
  return (char) strtol(s, NULL, 2);
}

char *c2b(char *input); /* Define function */

char *c2b(char *input) {

  RECORD *ptr_record;

  ptr_record = malloc (sizeof(RECORD));

  if (ptr_record == NULL) {
    printf("Out of memmory!\nExit!\n");
    exit(0);
  }

  char *temp;
  char str[2] = {0};

  for (temp = input; *temp; ++temp) {
    int bit_index;
    for (bit_index = sizeof(*temp)*8-1; bit_index >= 0; --bit_index) {
      int bit = *temp >> bit_index & 1;
      snprintf(str, 2, "%d", bit);
      strncat(ptr_record->process , str , sizeof(ptr_record->process) );
    }
  }

  return ptr_record->process;

}

int main(void) {

  RECORD *ptr_record;

  ptr_record = malloc (sizeof(RECORD));

  if (ptr_record == NULL) {
    printf("Out of memmory!\nExit!\n");
    exit(0);
  }

  char *temp = "LOCL";
  char *final = c2b(temp);

  printf("This is the return: %s\n",final);
  printf("This is the strlen of return: %zu\n",strlen(final));

  char binary2char[24][9] = {{0}};

  int i;
  char loop;
  char conversion[2] = {0};
  //char word[5] = {0};

  for( i = 0; i <= 24; i += 8 ) {
    memcpy( binary2char[i] , &final[i] , 8 * sizeof(char) );
    printf("ONE by ONE: %s , i: %i\n",binary2char[i],i);
    loop = b2c(binary2char[i]);
    printf("This is loop: %c\n",loop);
    sprintf( conversion , "%d" , loop );
    printf("This is conversion: %s\n",conversion);
    //strncat( word , loop , sizeof(word) );
  }

  //printf("Miracle: %s\n",word);

  free ( ptr_record );

  return 0;

}
要“连接”字符,请分配足够的空间并逐个分配,例如:

size_t size = (binary_string_size + CHAR_BIT - 1) / CHAR_BIT + 1;
char* s = malloc(size);
if (!s)
  error;

s[size-1] = '\0';
//...
s[i / CHAR_BIT] = b2c(binary2char[i]);

不要在问题中加入不相关的代码。尝试。注意:代码中存在多个不相关的问题:例如,
char
的右移(首先转换为无符号字符),不必要的
sizeof(char)
(它始终是一个),您可以使用
char\u位
而不是
8
记录
size_t size = (binary_string_size + CHAR_BIT - 1) / CHAR_BIT + 1;
char* s = malloc(size);
if (!s)
  error;

s[size-1] = '\0';
//...
s[i / CHAR_BIT] = b2c(binary2char[i]);