将Ascii转换为二进制
我正在写一个程序,我需要将Ascii字符转换成二进制,然后进行计数。我已经让我的代码工作,但它打印的是额外的信息,不一定是正确的二进制文件。下面是我的代码以及给定字符集的输出。任何帮助都将不胜感激将Ascii转换为二进制,c,count,binary,ascii,C,Count,Binary,Ascii,我正在写一个程序,我需要将Ascii字符转换成二进制,然后进行计数。我已经让我的代码工作,但它打印的是额外的信息,不一定是正确的二进制文件。下面是我的代码以及给定字符集的输出。任何帮助都将不胜感激 #include <stdio.h> #include <stdlib.h> void binaryPrinter(int digEnd, int value, int * noOfOnes); void print(char c); int cha
#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);
}
#包括
#包括
void二进制打印机(int-digEnd、int-value、int*noOfOnes);
空白打印(字符c);
int charToInt(字符c)
{
返回(int)c;
}
int main()
{
字符值;
int结果=1;
while(结果!=EOF)
{
结果=扫描频率(“%c”和值);
如果(结果!=EOF)
{
印刷品(价值);
}
}
}
void二进制打印机(int-digEnd、int-value、int*noOfOnes)
{
if(值&1)
{
(*noOfOnes)=(*noOfOnes)+1;
值=值>>1;
迪根--;
printf(“1”);
}
其他的
{
值=值>>1;
迪根--;
printf(“0”);
}
如果(digEnd==0)
返回;
其他的
二进制打印机(digEnd、value、noOfOnes);
}
作废打印(字符c)
{
整数计数=0;
printf(“字符%c=”,c);
二进制打印机(8,图表点(c)和计数);
printf(“1的=%d\n”,计数);
}
以下是一对函数:
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");
}
void打印字符(字符c){
int i;
对于(i=0;i<8;i++){
printf(“%d”,(c>>i)和0x1);
}
}
无效printStringAsBinary(字符*s){
对于(;*s;s++){
打印字符(*s);
printf(“”);
}
printf(“\n”);
}
您可以在此处看到它们的作用:。它们的工作原理是屏蔽每个字符的一个位,然后一次打印一个 输出:(还要注意最后一行-我相信它正在打印空值,但不确定如何删除它)j2l3ks字符j=10101001 1的=4字符2=10110011的=5字符l=11001001的=4字符3=00110011的=4字符k=00101001的=3字符s=00110001的=3字符10101111的=6您提到的ASCII码。您的stdin不太可能只提供ASCII字符,或者您的程序只使用ASCII字符。许多字符集是ASCII的超集。对于ASCII字符,许多编码与ASCII相同。程序以二进制形式打印编码字符的字节值。它不关心也不知道字符集或编码。它们可能是Unicode/UTF-8或类似于Windows-1252的东西。将此字符复制并粘贴到终端中,以查看程序的输出。解释如何输入
j2l3ks
。可能这很简单,因为您正在输入j2l3ks\n
或j2l3ks\0
。此外,您的二进制文件首先打印最低有效位。我使用了ƛ字符并收到了此输出-字符=01000111 1的=4字符=01001101的=4字符=011010001 1的=4字符=01010000 1的=2这里当然是个谜-最后打印的代码在您的两个示例中有所不同。建议printf(“字符%x%x“%c”=”,(无符号字符)c,(无符号字符)chartPoint(c),c)代码>并报告结果。我怀疑二进制打印机(8,ChartPoint(c),&count)
中有恶意,特别是ChartPoint(char c)
。编码准确吗?