C 如何将二进制字符串转换为无符号整数?

C 如何将二进制字符串转换为无符号整数?,c,C,我正在尝试将二进制字符串转换为无符号整数,但我仍然无法找到使之成为可能的方法,以下是我的代码,可能没有太多意义: unsigned int binary_to_uint(const char *b) { unsigned int k = 2; unsigned int i; unsigned int c; unsigned int len; if (b == NULL) return (0); len = strlen(b);

我正在尝试将二进制字符串转换为无符号整数,但我仍然无法找到使之成为可能的方法,以下是我的代码,可能没有太多意义:

unsigned int binary_to_uint(const char *b)
{
    unsigned int k = 2;
    unsigned int i;
    unsigned int c;
    unsigned int len;
    if (b == NULL)
        return (0);
    len = strlen(b);
    for (c = len; c > 0; c--)
    {
        if (b[c] != 48 || b[c] != 49)
            return (0);
        if (b[c] == '1')
        {
            i += atoi(b) * k;
        }
        k *= 2;
    }
    return (i);
}

您的代码中存在许多问题:

  • 如果从索引
    len
    开始,则访问字符串的
    '\0'
    字节
  • 你的索引没有下降到0,这意味着你错过了第一个数字
  • 在循环过程中,您总是使用
    atoi(b)
    ,这不是很有用
  • 从最右边的数字开始,但其值使用
    k=2
    ,而不是1
通常,此类转换按照简单的方案进行:

unsigned int binary_to_uint(const char *b)
{
  unsigned int val = 0;
  int i = 0;

  if (b == NULL)
    return 0;

  while (b[i] == '0' || b[i] == '1')
  {  // Found another digit.
    val <<= 1;
    val += b[i]-'0';
    i++;
  }
  return val;
}
unsigned int binary到uint(const char*b)
{
无符号int val=0;
int i=0;
如果(b==NULL)
返回0;
而(b[i]=“0”| b[i]=“1”)
{//找到了另一个数字。
valif(b[c]!=48 | | b[c]!=49)中的条件始终为真,并且在c中,索引范围为0到len-1

unsigned int binary_to_uint( const char *b)
{
 unsigned int k = 1;
 unsigned int i=0;
 int c;
 unsigned int len;

 len = strlen(b);

  for (c = len-1; c >= 0; c--)
 {
  if (b[c] != '0' && b[c] != '1')
      return (0);
    if (b[c] == '1')
    {
     i += k;
     }
    k *= 2;
}
 return (i);
}

我必须检测数字是否不是0或1,它将返回0我不确定转换的概念以及如何使其转换,因此您尝试将字符串的数字转换为“1234”作为要存储为数字1234的字符串,或者您想将字符串的前8个字节转换为无符号长整型数?请提供示例输入和输出。允许任何长度吗?您可以使用字符常量
'0'
'1'
代替ASCII十进制码48和49。@Gerhardh,answ编辑呃,根据你的建议。谢谢