在填充为0的二进制表示中添加一个

时间:2015-10-29 01:06:41

标签: c binary bit-manipulation

我有一个二进制数的字符表示,我希望对它执行算术加1。我想保持0的填充。

现在我有:

int value = fromBinary(binaryCharArray);
value++;

int fromBinary(char *s) {
    return (int)strtol(s, NULL, 2);
}

我需要将值++转换为二进制表示,如果我有0来填充,我需要填充它。

0110 - > 6

6 ++ - > 7

7 - > 0111< - 这是我应该通过字符表示法将其转换回来的原因

在我的问题中,它永远不会超过15。

这是我到目前为止所拥有的

char *toBinary(int value) 
{ 
    char *binaryRep = malloc(4 * sizeof(char)); 
    itoa(value, binaryRep, 2); 
    if (strlen(binaryRep) < 4) 
    { 
        int index = 0; 
        while (binaryRep[index] != '1') 
        { 
            binaryRep[index] = '0'; 
            index++;
        }
    }
    return binaryRep; 
}

3 个答案:

答案 0 :(得分:2)

试试这个

#include <stdio.h>

int main(void)
{
    unsigned int x;
    char binary[5]; /* You need 5 bytes for a 4 character string */

    x = 6;
    for (size_t n = 0 ; n < 4 ; ++n)
    {
        /* shift right `n' bits and check that the bit is set */
        binary[3 - n] = (((x >> n) & 1) == 1) ? '1' : '0';
    }
    /* nul terminate `binary' so it's a valid c string */
    binary[4] = '\0';

    fprintf(stderr, "%s\n", binary);
    return 0;
}

答案 1 :(得分:1)

char *binaryRep = malloc(4* sizeof(char));
binaryRep[4] = '\0';
for (int i = (sizeof(int)) - 1; i >= 0; i--) {
    binaryRep[i] = (value & (1 << i)) ? '1' : '0';
}
return binaryRep;

这就是我需要的。

答案 2 :(得分:-2)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
/*___________________________________________________________
*/

int from_bin(char *buff){
    int d=0;
    while(*buff){
        d<<=1;
        d+=(*buff=='1')?1:0;
        buff++;
    }
    return d;
}
/*___________________________________________________________
*/


int to_bin(int d,char *buff,int len){
    int ret=0;
    if(len<4)return -1;
    if(d & ~0xf){

        ret=to_bin(d>>4,buff,len-4);
        if(ret==-1) return -1;
        buff+=ret;
    }

    buff[4]=0;

    buff[3]=((d & 0x1)?'1':'0');
    d>>=1;

    buff[2]=((d & 0x1)?'1':'0');
    d>>=1;

    buff[1]=((d & 0x1)?'1':'0');
    d>>=1;

    buff[0]=((d & 0x1)?'1':'0');
    d>>=1;

    return ret+4;
}
/*___________________________________________________________
*/
int main(void){
    int n;
    char buff[33]="0011";

    n=from_bin(buff);

    n+=1;

    if(to_bin(n,buff,8)==-1){
        printf("ERROR: buffer too small\n");
    }else{
        printf("bin of %d= '%s'\n",n,buff);
    }

    return 0;

}