【问题标题】:Convert Ascii to Binary将ASCII转换为二进制
【发布时间】:2014-08-16 17:25:01
【问题描述】:

我正在编写一个程序,我需要将 Ascii 字符转换为二进制然后进行计数。我已经让我的代码工作了,但它正在打印附加信息,不一定是正确的二进制文件。下面是我的代码以及给定字符集的输出。任何帮助将不胜感激!

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

    void binaryPrinter(int digEnd, int value, int * noOfOnes);
    void print(char c);

    int charToInt(char c)
    {
        return (int) c;
    }

    int main()
    {
        char value;
        int result = 1;
        while(result != EOF)
    {
        result = scanf("%c", &value);
        if(result != EOF)
        {
            print(value);
        }
    }
 }

    void binaryPrinter(int digEnd, int value, int * noOfOnes)
    {
        if(value & 1)
        {
        (*noOfOnes) = (*noOfOnes) + 1;
        value = value >> 1;
        digEnd--;
        printf("1");
        }
    else
        {
        value = value >> 1;
        digEnd--;
        printf("0");
        }

    if(digEnd == 0)
        return;
    else
        binaryPrinter(digEnd, value, noOfOnes);
    }

    void print(char c)
        {
        int count = 0;
        printf("The character %c =", c);
        binaryPrinter(8, charToInt(c), &count);
        printf(" 1's = %d\n", count);
        }

【问题讨论】:

  • 输出:(还要注意最后一行 - 我相信它正在打印空值但不知道如何删除它) j2l3ks 字符 j =10101001 1's = 4 字符 2 =10110011 1's = 5 字符 l =11001001 1 = 4 字符 3 =00110011 1 = 4 字符 k =00101001 1 = 3 字符 s =00110001 1 = 3 字符 =10101111 1 = 6
  • 你提到了 ASCII。您的标准输入不太可能只提供 ASCII 字符,或者您的程序将只使用 ASCII 字符。许多字符集是 ASCII 的超集。许多编码与 ASCII 字符的 ASCII 相同。您的程序以二进制形式打印编码字符的字节值。它不关心也不知道字符集和编码。它们可能是 Unicode/UTF-8 或类似 Windows-1252 的东西。将此字符 复制并粘贴到您的终端中,以查看程序输出的内容。
  • 解释如何您输入j2l3ks。也许这很简单,就像您输入j2l3ks\nj2l3ks\0。此外,您的二进制文件首先打印最低有效位。
  • 我使用 ƛ 字符并收到此输出 - 字符 _ = 01000111 1's = 4 字符 _ = 01001101 1's = 4 字符 _ = 01101001 1's = 4 字符 = 01010000 1's = 2
  • 这里肯定有一个谜 - 最后打印的代码在您的 2 个示例中有所不同。建议printf("The character %x %x '%c' =", (unsigned char) c, (unsigned char) charToInt(c), c); 并报告结果。我怀疑binaryPrinter(8, charToInt(c), &amp;count) 中的恶作剧,特别是charToInt(char c)。编码是否准确发布?

标签: c count binary ascii


【解决方案1】:

这是一对函数:

void printCharAsBinary(char c) {
    int i;
    for(i = 0; i < 8; i++){
        printf("%d", (c >> i) & 0x1);
    }
}

void printStringAsBinary(char* s){
    for(; *s; s++){
        printCharAsBinary(*s);
        printf(" ");
    }
    printf("\n");
}

您可以在此处查看它们的运行情况:http://ideone.com/3mEVbE。它们通过屏蔽每个字符的单个位并一次打印一个来工作。

【讨论】:

    猜你喜欢
    • 2016-10-02
    • 1970-01-01
    • 1970-01-01
    • 2012-03-30
    • 2014-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-15
    相关资源
    最近更新 更多