[英]Decimal To Binary in C Char Array
我想从十进制数返回16BIT二进制。 我有2个密码。
在第一个中,我尝试返回一个char数组。
在第二个中,a具有输出,但输出顺序相反。
也许有人来看看代码。 谢谢
输出优先功能:Þ0000000000010000es(x862uÿ¼×
#include <stdio.h>
#include <stdlib.h>
const int BIT = 16;
void binary(int);
char *bin(int);
int main() {
binary(16);
printf("\n");
printf("%s\n", bin(16));
return 0;
}
char *bin(int x) {
char * new = (char*)malloc(sizeof(char) * BIT + 1);
new[BIT] = '\0';
if (x >= 0 && x <= 65535) {
for (int i = 0; i < BIT; i++) {
if (x % 2 == 0) {
new[BIT - i] = '0';
} else {
new[BIT - i] = '1';
}
x = x / 2;
}
}
return new;
}
void binary(int x) {
if (x >= 0 && x <= 65535) {
for (int i = 0; i < BIT; i++) {
if (x % 2 == 0) {
printf("0");
} else {
printf("1");
}
x = x / 2;
}
}
}
我试着回答你的问题。 我对任何拒绝我投票的人都不感兴趣...所以我尽力了!
所以我建议这样的事情:
do {
if (number & 1) {
printf("1");
} else {
printf("0");
}
number >>= 1;
} while(number);
这将以相反的方向输出零和一,直到不再有一个。
如果要固定宽度的表示形式:
#define BITS 16
for (int bits = 0; bits < BITS; bits++) {
if (number & 1) {
printf("1");
} else {
printf("0");
}
number >>= 1;
}
如果要将其存储到数组中,请用以下命令替换printf
char *bitmap = (char*)malloc(BITS+1);
bitmap[BITS] = '\0'; // NULL termination
bitmap[BITS-1-bits] = '1';
要么
bitmap[BITS-1-bits] = '0';
分别有
printf("%s\n", bitmap);
不要忘记free(bitmap).
始终考虑,数组是从零开始的索引。 因此,对于16位,最好将位编号从0改为15。 我尚未测试此代码,但它的工作原理如下。 :)
这可以正常工作,函数bin()
覆盖main()
数组arr
( 如何从函数返回char数组? ):
#include <stdio.h>
#include <stdlib.h>
const int BIT = 16;
void binary(int);
void bin(char*, int);
int main(int argc, char* argv[]) {
int x ;
x = atoi(argv[1]);
char arr[BIT+1];
//binary(16);
bin(arr, x); // functions overwrites array arr
arr[BIT] = '\0'; // strings have to be null-terminated in C
printf("%s \n", arr);
return 0;
}
void bin(char *arr1,int x) {
if (x >= 0 && x <= 65535)
{
for (int i = BIT-1; i >= 0; i--)
{
if (x % 2 == 0)
{
arr1[i] = '0';
} else
{
arr1[i] = '1';
}
x = x / 2;
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.