【问题标题】:Convert char to binary将字符转换为二进制
【发布时间】:2014-09-28 06:04:18
【问题描述】:

我一直在从事一个项目,在该项目中,我们需要将名称的字母转换为其二进制等价物。

A 部分要求我们:

在每个字节中按字母“0”或“1”显示(写入)每个位 您的姓氏,例如

B 部分要求我们:

使用输入名称的第一个字符作为掩码 (按位或)其他字符的掩码并将它们显示出来 就像 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“&”更改为OR“|”。掩码是名称的第一个字母,即名称[0],而不是我在 A 部分中的 128。即使我在两个方向上移动位,即 mask2 >>= 1 和 a1 >> = 我仍然得到错误的输出。有人可以帮助我解决这个问题。我知道我已经很接近了,一定是一些小错误阻碍了我。

谢谢

【问题讨论】:

标签: c binary shift


【解决方案1】:

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

第一部分是说做showBinary(name[x]), for x in [0, strlen(name))

第二部分是说做showBinary(name[0] | name[x]), for x in [1, strlen(name))

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

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

【讨论】:

  • 所以对于第 2 部分是这样的:y = 1,而不是 y = 0?
  • 这是一个变化,是的(因此用作 OR 掩码的字符本身不会显示,这可能是我对任务的错误阅读,但与其他逻辑问题无关)。但是,更重要的是,将printf("%d", (a1 | mask2) &gt; 0); 改回,使其看起来像first“showBinary”,然后删除a1 &lt;&lt;= 1。然后正确地将按位或运算应用于 a1 之前 它用于“showBinary”操作/循环。我建议使用一个函数并遵循上面的高级概述以使这一点更加明显。
  • 我能够通过设置 a1 = name[0] | 来更正代码name[y] 并删除 a1 位移。它现在输出我想要的。感谢您的帮助。
猜你喜欢
  • 2021-02-24
  • 1970-01-01
  • 2014-11-07
  • 2014-08-02
  • 1970-01-01
  • 1970-01-01
  • 2016-07-16
相关资源
最近更新 更多