将整数添加为 char 以在 C 中创建字符串
Adding integers as char to create a string in C
我想问一下是否有办法将整数添加为 char 值并创建一个字符串。我写了一些代码,但只检测到最后一位数字
void binary(int decimal) {
int modulus;
char bin[9];
while (decimal != 0) {
modulus = decimal % 2;
sprintf(bin, "%d", modulus);
if (modulus == 1) {
decimal--;
}
decimal = decimal / 2;
}
puts(bin);
}
如果小数是 10
,则只保留 1
而不是 0101
。我该如何解决?我正在使用 Turbo C++ 3.0。
当然,您是在相同的 bin
位置打印,而不是移动 "cursor"。
在字符串上声明一个指针并在每个 sprintf
之后递增它应该有效,因为 sprintf
仅发出 1 个数字 + 空终止字符。
char bin[9];
char *ptr = bin;
while (decimal != 0) {
modulus = decimal % 2;
sprintf(ptr, "%d", modulus);
ptr++;
生成字符串,但相反(因为首先处理低位)。只需反转打印或之后反转即可。
int l = strlen(bin);
for (i=0;i<l;i++)
{
putc(bin[l-i-1]);
}
putc("\n");
这是一个将小数打印为二进制的函数:
void print_binary(int num)
{
int pos = (sizeof(int) * 8) - 1;
printf("%10d: ", num);
for (int i = 0; i < (int)(sizeof(int) * 8); i++) {
char c = num & (1 << pos) ? '1' : '0';
putchar(c);
if (!((i + 1) % 8))
putchar(' ');
pos--;
}
putchar('\n');
}
输出:
42: 00000000 00000000 00000000 00101010
这正是您的函数,稍加修改和注释。
二进制字符串仍然是颠倒的。
void binary(int decimal) {
int modulus;
char bin[9];
char temp[2]; // temporary string for sprintf
bin[0] = 0; // initially binary string set to "" (empty string)
while (decimal != 0) {
modulus = decimal % 2;
sprintf(temp, "%d", modulus); // print '1' or '0' to temporary string
strcat(bin, temp); // concatenate temporary string to bin
if (modulus == 1) {
decimal--;
}
decimal = decimal / 2;
}
puts(bin);
}
有更有效的方法来实现这一点,特别是利用左移运算符(<<
),这样你就可以直接构造二进制字符串,而不需要在最后反转它。
我想问一下是否有办法将整数添加为 char 值并创建一个字符串。我写了一些代码,但只检测到最后一位数字
void binary(int decimal) {
int modulus;
char bin[9];
while (decimal != 0) {
modulus = decimal % 2;
sprintf(bin, "%d", modulus);
if (modulus == 1) {
decimal--;
}
decimal = decimal / 2;
}
puts(bin);
}
如果小数是 10
,则只保留 1
而不是 0101
。我该如何解决?我正在使用 Turbo C++ 3.0。
当然,您是在相同的 bin
位置打印,而不是移动 "cursor"。
在字符串上声明一个指针并在每个 sprintf
之后递增它应该有效,因为 sprintf
仅发出 1 个数字 + 空终止字符。
char bin[9];
char *ptr = bin;
while (decimal != 0) {
modulus = decimal % 2;
sprintf(ptr, "%d", modulus);
ptr++;
生成字符串,但相反(因为首先处理低位)。只需反转打印或之后反转即可。
int l = strlen(bin);
for (i=0;i<l;i++)
{
putc(bin[l-i-1]);
}
putc("\n");
这是一个将小数打印为二进制的函数:
void print_binary(int num)
{
int pos = (sizeof(int) * 8) - 1;
printf("%10d: ", num);
for (int i = 0; i < (int)(sizeof(int) * 8); i++) {
char c = num & (1 << pos) ? '1' : '0';
putchar(c);
if (!((i + 1) % 8))
putchar(' ');
pos--;
}
putchar('\n');
}
输出:
42: 00000000 00000000 00000000 00101010
这正是您的函数,稍加修改和注释。
二进制字符串仍然是颠倒的。
void binary(int decimal) {
int modulus;
char bin[9];
char temp[2]; // temporary string for sprintf
bin[0] = 0; // initially binary string set to "" (empty string)
while (decimal != 0) {
modulus = decimal % 2;
sprintf(temp, "%d", modulus); // print '1' or '0' to temporary string
strcat(bin, temp); // concatenate temporary string to bin
if (modulus == 1) {
decimal--;
}
decimal = decimal / 2;
}
puts(bin);
}
有更有效的方法来实现这一点,特别是利用左移运算符(<<
),这样你就可以直接构造二进制字符串,而不需要在最后反转它。