我有一个二进制数的字符表示,我希望对它执行算术加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;
}
答案 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;
}