我尝试将二进制字符串转换为十进制并使用以下函数。
只要二进制字符串是 32 位长,它就可以正常工作。但在那之后它不会产生正确的结果。例如,注释为无效的二进制字符串。
谁能帮我找到问题所在?
#include <stdio.h>
// converts binary string to integer decimal number
size_t strBinaryToDecimal(char* s)
{
char c;
char *p = s;
size_t r = 0;
while (p && *p)
{
c = *p++;
if ( c == '0' ) { r = (r<<1) ; } // shift 1 bit left and add 0
else if ( c == '1' ) { r = (r<<1) + 1 ; } // shift 1 bit left and add 1
else { break ; } // bail on invalid character
}
return (size_t)r;
}
int main(void)
{
char reading[32] = "10011001100110011001100110011001";
// char reading[33] = "100110011001100110011001100110011"; // not working correctly
printf("Binary: %s\n", reading);
printf("Decimal: %zu\n", strBinaryToDecimal(reading));
return 0;
}
我尝试将十进制整数类型更改为size_t。但它没有用。
size_t
在 C 中有特定的功能const
unsigned long long strBinaryToDecimal(const char* p)
{
unsigned long long result = 0;
if(p)
while(*p)
{
result <<= 1;
if(*p == '0' || *p == '1') result += *p == '1';
else return -1;
p++;
}
return result;
}
int main(void)
{
char reading[] = "10011001100110011001100110011001";
printf("Binary: %s\n", reading);
printf("Decimal: %llu\n", strBinaryToDecimal(reading));
}