繁体   English   中英

需要帮助将二进制数转换为C中的字符串

[英]Need help converting binary number to string in C

所以我正在尝试使用这种方法将二进制数转换为字符串

//convert input to binary
nTemp = nGiven; //n is a input number
int nTemp;
int nBitCounter = 0;
char str[18];
 char temp[1];

strcpy(str, "0");

 /* count the number of bits of the given number */
for (; nTemp != 0; nBitCounter++)
    nTemp = nTemp >> 1;

/* store the binary number into a string */
for (; nBitCounter>0; nBitCounter--) {
    nTemp = 1 << (nBitCounter - 1);
    int binNum = (nTemp & nGiven) >> (nBitCounter - 1);
    printf("%d", binNum);
    _itoa(binNum, temp, 10);
    strcat(str, temp);
}

但是我无法弄清楚如何正确地做我想做的事情。 binNum的打印是正确的,但我不知道如何将该二进制表示形式存储为字符串。 在第二个“ for”循环中,我需要将binNum存储为一个字符(临时),然后将其附加到字符串(str)。

任何帮助将不胜感激。

首先,将temp声明为:

char temp[2];

因为您需要一个具有空字符的字节。

使用sprintf()函数:

sprintf(temp,"%d", binNum);

接着:

strcat(str, temp);

我会尝试这样的事情:

int idx(char cc)
{
  if (cc >= '0' && cc <= '9')
    return cc - '0' ;
  else if (cc >= 'A' && cc < 'F')
    return cc - 'A' + 10 ;
  else
    return cc - 'a' + 10 ;
}

void ConvertToBinary (int value, char *output)
{
   char *digits [] = { "0000", "0001", "0010", "0011", 
                       "0100", "0101", "0110", "0111",
                       "1000", "1001", "1010", "1011",
                       "1100", "1101", "1110", "1111", } ;

   char buffer [32] ;
   output [0] = 0 ;

   sprintf (buffer, "%x", value) ;

   int ii ;
   for (ii = 0 ; buffer [ii] != 0 ; ++ ii)
   {

      strcat (output, digits [idx (buffer [ii])]) ;
   }       

   return ;
}

我还指出,您的str缓冲区太小。

问题代码非常接近。

以下代码有效:

int nGiven = 0x1234;    //n is a input number   
int nTemp;
int nBitCounter=0;
char str[18];
char temp[2];

strcpy(str, "0");

/* count the number of bits of the given number */
for(nTemp=nGiven; nTemp; nBitCounter++)
    nTemp = nTemp >> 1;

/* store the binary number into a string */
for(; nBitCounter; nBitCounter--)
   {
   int binNum;

   nTemp = 1 << (nBitCounter - 1);
   binNum = (nTemp & nGiven) >> (nBitCounter - 1);
// _itoa(binNum, temp, 10);

我无权访问名为“ _itoa()”的函数; 因此请改用snprintf()。

   snprintf(temp, sizeof(temp), "%d", binNum);
   strcat(str, temp);
   }

printf("%s\n", str);

您的代码比需要的要复杂。 假设您想删除前导零,因为您的代码似乎表明:

#include <limits.h>
#include <stdio.h>

int main()
{
    unsigned int nTemp = 123456789;
    char buf[CHAR_BIT * sizeof(int) + 1];
    char *ptr = buf;

    for ( int i = CHAR_BIT * sizeof(int); i--; )
    {
       if ( nTemp & (1u << i) )
           *ptr++ = '1';
       else if ( ptr != buf )
           *ptr++ = '0';
    }
    *ptr = 0;

    printf("%s\n", buf);
}

这将为输入0提供一个空白字符串,您可以通过在末尾添加if (ptr == buf)并采取措施来更改该字符串。

char * temp;

.....

temp = malloc(nBitCounter + 1);
temp[nBitCounter] = '\0';

for (; nBitCounter > 0; nBitCounter--) {
//  get the binNum by nBitCounter;
    temp[nBitCounter - 1] = binNum + '0';  // if 0, you get '0'; if 1, you get '1'
}

strcat(str, temp);
free(temp);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM