gpt4 book ai didi

c - 在 C 中以二进制形式打印 ASCII 字符值

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

我是 C 的新手,对于一项作业,我必须打印最多 5 个 ASCII 字符组合的 8 位二进制表示,即。 D3% = 01000100 00110011 00100101。

这是我的代码:

void ascii_to_binary(int * option_stats, char * ascii)
{
int i, j, num_value, count, binary[40], length, space=0; /* binary array length of 40 as */
length = strlen(ascii); /* 5*8 bit characters is 40 */
count = 8;
pos = 0
printf("Binary representation: ");
for (i = 0; i < length; i++)
{
num_value = ascii[i];

while(count > 0)
{
if((num_value%2) == 0)
{
binary[pos] = 0;
num_value = num_value/2;
count--;
pos++;
}
else
{
binary[pos] = 1;
num_value = num_value/2;
count--;
pos++;
}
}
count = 8; /*resets loop counter*/
}
for(j = pos-1; j >= 0; j--)
{
printf("%d", binary[j]);
space++;
if(space == 8)
{
printf(" "); /*white space between bytes*/
}
}
read_rest_of_line(); /*used as part of the larger program as a whole,
please ignore*/
}

我输入的ASCII字符是从一个单独的函数传过来的,代码如下:

void run_ascii_binary(void)
{
char input[MAX_STRING_INPUT + EXTRA_SPACES], ascii;
int option_stats;
printf("ASCII to Binary Generator\n");
printf("-------------------------\n");
printf("Enter a String (1-5 characters): ");
if (fgets(input, MAX_STRING_INPUT+EXTRA_SPACES, stdin) != NULL)
{
sscanf(input, "%s", &ascii);
}
ascii_to_binary(&option_stats, &ascii);
}

我的问题是打印实际的二进制文件。

我得到的输出是:00100101 11001100 01000100 其中第一个字节和第三个字节的顺序错误。让它以正确的顺序打印它的任何提示都会很棒!

谢谢!

最佳答案

ascii 需要足够大以容纳 5 个 char 和一个 \0

char ascii[5+1];
...
sscanf(input, "%5s", &ascii);

初始化option_stats

int option_stats = 0;

取消注释 length = strlen(ascii);。它被上一行未终止的注释注释掉了。

@LtWorf 是正确的,OP 应该正好循环 8 次。

// while(num_value > 0) {
int bit;
int counti = count; /// see below
for (i=8; i-- > 0; ) {

此外,这些位是从最不重要到最重要累积的,但您希望将它们从最大到最小显示。因此,将它们以相反的顺序累积在您的字符串中。

// In two places
// binary[count] = ...
binary[counti] = ...

还有其他方法可以清理代码,但这是 5 个主要问题。

关于c - 在 C 中以二进制形式打印 ASCII 字符值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18818545/

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