我不确定具体是你要求什么。您是指写入字符串或将变量转换为字符串(即8)的数字的二进制表示(即00001000)?我会假设你是第一个。
要做到这一点,最简单的方法是重复测试至少显著位和值向右移(>>
)。我们可以在for循环中做到这一点。但是,您需要知道您需要读取多少位。我们可以用sizeof
来做到这一点。
int i = 15;
for (int b = 0; b < sizeof(i); ++b) {
uint8_t bit_value = (i & 0x1);
i >>= 1;
}
那么我们如何将这个迭代转换为一个字符串呢?我们需要反向构建字符串。我们知道需要多少位,因此我们可以创建一个字符串缓冲区,并使用额外的字节来实现NULL终止。
char *buffer = calloc(sizeof(i) + 1, sizeof(char));
这样做是分配内存,sizeof(i) + 1
元素长,每个元素都是sizeof(char)
,然后零的每个元素。现在让我们把这些位放入字符串中。
for (int b = 0; b < sizeof(i); ++b) {
uint8_t bit_value = (i & 0x1);
size_t offset = sizeof(i) - 1 - b;
buffer[offset] = '0' + bit_value;
i >>= 1;
}
那么这里发生了什么?在每次传递中,我们计算缓冲区中的偏移量,我们应该将其写入一个值,然后在将它写入缓冲区时,将0
的ASCII值加到bit_value
。
此代码是未经测试,可能有一些问题,但毕竟是作为练习留给读者。如果您有任何问题,请告诉我!
通用警告:不要投)的malloc'结果('。 – fuz
这些括号是什么?什么含有“我”?如果你想把一个数字转换成一个字符串,你必须明确地使用它,即使用'sprintf'或类似的方法。 – hexasoft
我包含给定十进制数的二进制数的长度..假设给定的数字是A = 6,我包含3,我需要一个字符串'结果'具有'110',这是二进制值6。 –