C语言中字符到二进制的转换

C语言中字符到二进制的转换,c,string,binary,char,ascii,C,String,Binary,Char,Ascii,我正在尝试将字符转换为其二进制表示形式(因此字符-->ascii十六进制-->二进制) 我知道要做到这一点,我需要换档和和。但是,由于某些原因,我的代码不起作用 这是我的*temp指向C字符串中的索引 char c; int j; for (j = i-1; j >= ptrPos; j--) { char x = *temp; c = (x >> i) & 1; printf("%d\n", c); temp--; } 我们展示了两个

我正在尝试将字符转换为其二进制表示形式(因此字符-->ascii十六进制-->二进制)

我知道要做到这一点,我需要换档和
。但是,由于某些原因,我的代码不起作用

这是我的
*temp
指向C字符串中的索引

char c;
int j;
for (j = i-1; j >= ptrPos; j--) {
    char x = *temp;
    c = (x >> i) & 1;
    printf("%d\n", c);
    temp--;
}

我们展示了两个将单个字符打印为二进制的函数

void printbinchar(char character)
{
    char output[9];
    itoa(character, output, 2);
    printf("%s\n", output);
}
printbinchar(10)将写入控制台

    1010
    00001010
itoa是一个库函数,它将单个整数值转换为具有指定基的字符串。 例如itoa(1341,输出,10)将写入输出字符串“1341”。 当然,itoa(9,output,2)将写入输出字符串“1001”

下一个函数将在标准输出中打印字符的完整二进制表示,也就是说,如果较高的位为零,它将打印所有8位

void printbincharpad(char c)
{
    for (int i = 7; i >= 0; --i)
    {
        putchar( (c & (1 << i)) ? '1' : '0' );
    }
    putchar('\n');
}
现在,我提供了一个函数,它可以打印出整个字符串(没有最后一个空字符)

但是,请考虑itoa不添加填充零,因此printstringasbinary(“AB1”)将打印如下内容:

1000001
1000010
110001

您的代码非常模糊,无法理解,但我可以为您提供另一种选择

首先,如果希望
temp
遍历整个字符串,可以执行以下操作:

char *temp;
for (temp = your_string; *temp; ++temp)
    /* do something with *temp */
术语
*temp
作为
条件只是检查您是否已到达字符串末尾。如果有,
*temp
将是
'\0'
num
),并且
结束

现在,在for中,您希望找到组成
*temp
的位。假设我们打印位:

for (as above)
{
    int bit_index;
    for (bit_index = 7; bit_index >= 0; --bit_index)
    {
        int bit = *temp >> bit_index & 1;
        printf("%d", bit);
    }
    printf("\n");
}
要使其更通用,即将任何类型转换为位,可以将
bit\u index=7
更改为
bit\u index=sizeof(*temp)*8-1

unsigned char c;

for( int i = 7; i >= 0; i-- ) {
    printf( "%d", ( c >> i ) & 1 ? 1 : 0 );
}

printf("\n");
说明:

在每次迭代中,通过将字节和二进制与1进行比较,从字节中读取最高有效位

例如,假设输入值为128,二进制数转换为1000 0000。
将其移位7将得到0000 0001,因此得出的结论是最高有效位为1。0000 0001 & 1 = 1. 这是控制台中要打印的第一位。下一次迭代将导致0。。。0.

什么是
ptrPos
,什么是
i
?听起来好像您正在尝试将单个字符转换为二进制,在这种情况下非常简单,这意味着您不需要指针(这没有任何意义),您只需在位之间移位并检查它是否为1(以及是否为1)。看看Salvatore的第二段代码。你能给我们展示一两个特定输入和输出的例子吗?从技术上讲,应该是
i=CHAR\u BIT-1
。你知道,对于那些9位和11位处理器来说,这是错误的。itoa取一个整数,你传递的是*s,一个字符,不是错误*s表示字符串s指向的第一个字符。在c语言中,字符仅为8位整数(现在)。itoa(10,output,2)将字符串“1010”写入输出字符串。printbincharpad(10)将字符串“00001010”写入控制台。
unsigned char c;

for( int i = 7; i >= 0; i-- ) {
    printf( "%d", ( c >> i ) & 1 ? 1 : 0 );
}

printf("\n");