我有一个数字,希望在C语言中将其转换为二进制(从十进制)。
我希望我的二进制始终为5位(十进制永远不会超过31)。我已经有一个手动通过除法实现的函数,但很难将其填充到5位。
是否有更简单的方法?也许使用位移操作?
我还希望以char *
的形式表示二进制。
我有一个数字,希望在C语言中将其转换为二进制(从十进制)。
我希望我的二进制始终为5位(十进制永远不会超过31)。我已经有一个手动通过除法实现的函数,但很难将其填充到5位。
是否有更简单的方法?也许使用位移操作?
我还希望以char *
的形式表示二进制。
#include <stdio.h>
#include <string.h>
char numstr[9024];
int i = 0;
void format(int n, int base);
void printreverse(char *s);
int main()
{
int testnum = 312; // some random test number
format(testnum, 2); // 2 for binary
printreverse(numstr);
putchar('\n');
return 0;
}
void format(int n, int base)
{
if (n > 0) {
char tmp = (n % base) + '0';
numstr[i++] = tmp;
// If we put this above other two we don't need printreverse,
// But then we will have unwanted results in other places of numstr if we can't reset it
format(n/base, base);
} else
numstr[i] = '\0'; // terminating character
}
void printreverse(char *s)
{
long len = strlen(s);
while (len-->0)
putchar(s[len]);
}
我的看法:
char* to_bitstring(uint32_t val, char buffer[], int size) {
buffer[--size] = 0;
while (size > 0) {
buffer[--size] = (val % 2 ? '1' : '0');
val = val >> 1;
}
return buffer; /* convenience */
}
这将向缓冲区写入SIZE个字符:
char buffer[17];
printf("%s\n", to_bitstring(42, buffer, sizeof(buffer)));
并将打印:
0000000000101010