gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 04:41:11 25 4
gpt4 key购买 nike

我正在尝试转换一个字符串,例如(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;

}

这是输出示例:

This is the return: 01001100010011110100001101001100
This is the strlen of return: 32
ONE by ONE: 01001100 , i: 0
This is loop: L
This is conversion: 76
ONE by ONE: 01001111 , i: 8
This is loop: O
This is conversion: 79
ONE by ONE: 01000011 , i: 16
This is loop: C
This is conversion: 67
ONE by ONE: 01001100 , i: 24
This is loop: L
This is conversion: 76

最佳答案

要“连接”字符,请分配足够的空间并一一分配例如,

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]);

关于c - 如何在c中将字符数组转换为二进制,反之亦然,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26372234/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com