在C中将字符转换为二进制

时间:2011-10-23 00:15:30

标签: c string binary char ascii

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

我知道这样做我需要转移AND。但是,由于某些原因,我的代码无效。

这就是我所拥有的。 *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--;
}

3 个答案:

答案 0 :(得分:28)

我们展示了两个将SINGLE字符打印成二进制的函数。

void printbinchar(char character)
{
    char output[9];
    itoa(character, output, 2);
    printf("%s\n", output);
}

printbinchar(10)将写入控制台

    1010

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

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

void printbincharpad(char c)
{
    for (int i = 7; i >= 0; --i)
    {
        putchar( (c & (1 << i)) ? '1' : '0' );
    }
    putchar('\n');
}

printbincharpad(10)将写入控制台

    00001010

现在我提出了一个打印出整个字符串的函数(没有最后一个空字符)。

void printstringasbinary(char* s)
{
    // A small 9 characters buffer we use to perform the conversion
    char output[9];

    // Until the first character pointed by s is not a null character
    // that indicates end of string...
    while (*s)
    {
        // Convert the first character of the string to binary using itoa.
        // Characters in c are just 8 bit integers, at least, in noawdays computers.
        itoa(*s, output, 2);

        // print out our string and let's write a new line.
        puts(output);

        // we advance our string by one character,
        // If our original string was "ABC" now we are pointing at "BC".
        ++s;
    }
}

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

1000001
1000010
110001

答案 1 :(得分:2)

您的代码非常模糊且不易理解,但我可以为您提供替代方案。

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

char *temp;
for (temp = your_string; *temp; ++temp)
    /* do something with *temp */

术语*temp作为for条件只是检查您是否已到达字符串的末尾。如果有,*temp将为'\0'NUL),for结束。

现在,在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_index = 7更改为bit_index = sizeof(*temp)*8-1

答案 2 :(得分:1)

unsigned char c;

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

printf("\n");

<强>解释

每次迭代时,通过移位和二进制比较,从字节读取最高有效位。

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