【发布时间】: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\n或j2l3ks\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), &count)中的恶作剧,特别是charToInt(char c)。编码是否准确发布?