将char转换为二进制

时间:2014-09-28 06:04:19

标签: c binary shift

我一直致力于一个项目,我们需要将名称的字母转换成二进制等价物。

A部分要求我们:

  

按字母表显示(写入)每个位' 0'或者' 1'在每个字节中   你的姓氏,例如

B部分要求我们:

  

使用输入名称中的第一个字符作为掩码   其他字符的(按位OR)掩码并显示出来   像A部分那样。

我的A部分代码工作并输出正确的二进制序列。

输出:http://imgur.com/kAAhHyc

不幸的是,我的代码似乎不适用于B部分。

我的代码:http://imgur.com/cKmQzyS

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

main() {
    int i;
    int len;
    char name[20];
    char len_str[20];
    char a;
    int x = 0;
    int num;
    int num2;
    int y;
    char  a1;
    char a2;
    int z;
    int num3;

    write(1, "Enter your name: ", 17);
    len = read(0, name, 20);
    len--;  

    num = len;
    num2 = len;
    num3 = len;
/* part 1--------------------------------------*/
    while (num > 0) {
    a = name[x];
    printf(&a);
    printf(" ");

    int mask = 128; 
    while (mask > 0) {
        printf("%d", (a & mask) > 0);
        printf(" ");
        mask >>= 1;
    }
    x = x + 1;
    printf("\n");
    num--;

    }

    printf("\n");

/* part 2--------------------------------------*/
    y = 0;
    while (num2 > 0) {
    a1 = name[y];
    int mask2 = name[0];
    printf("0");
    printf(" ");
    while (mask2 > 0) {
        printf("%d", (a1 | mask2) > 0);
        printf(" ");
        mask2 >>= 1;
        a1 <<= 1;
    }
    y = y + 1;
    printf("\n");
    num2--;
    }
    printf("\n");

}

从我的代码和输出中可以看出(A部分输出是第一个二进制块,B部分是第二个)我在上面发布的内容似乎是错误的。我正在同时移动掩码和字母中的位,但我得到的输出不正确。我改变了AND&#34;&amp;&#34;到一个OR&#34; |&#34;。掩码是名称的第一个字母,即名称[0],而不是我在A部分中的128.即使我在两个位置移动相同方向的位,即mask2&gt;&gt; = 1和a1 &gt;&gt; =我仍然得到错误的输出。有人可以协助我解决这个问题。我知道我很接近,这是一个让我失望的小错误。

谢谢

1 个答案:

答案 0 :(得分:1)

放置代码以在函数中显示二进制输出,将其命名为void showBinary(char ch)

第一部分是对showBinary(name[x])中的x进行[0, strlen(name))

第二部分是对showBinary(name[0] | name[x])中的x进行[1, strlen(name))说。

在这两个任务中,“showBinary”操作的输入和调用会发生变化。 “showBinary”的实际代码/操作是相同的

使用函数命名此操作并对代码进行分组可以使区分更加清晰,并且可以从逻辑角度更容易地识别差异。在这种情况下,差异是第二种情况下“showBinary”函数循环中<{1}} 内部[{1}} 的[不正确]更改。