C 将十进制数的每个数字转换为相应的二进制数
我需要将字符串“12345678”转换为值000100100010100001011001111000(仅二进制值,左侧不带零)。 所以我用c编写了这段代码,问题是当我运行它时,它什么也不做,只是像出现错误一样等待,直到我手动停止它。 有什么想法吗C 将十进制数的每个数字转换为相应的二进制数,c,arrays,binary,c-strings,C,Arrays,Binary,C Strings,我需要将字符串“12345678”转换为值000100100010100001011001111000(仅二进制值,左侧不带零)。 所以我用c编写了这段代码,问题是当我运行它时,它什么也不做,只是像出现错误一样等待,直到我手动停止它。 有什么想法吗 #include <stdio.h> #include <string.h> void reduce(char string[]) { int i=0, j=0, k=0, cnt=0, tmp=4, num;
#include <stdio.h>
#include <string.h>
void reduce(char string[]) {
int i=0, j=0, k=0, cnt=0, tmp=4, num;
char arr[4], result[4*strlen(string)];
for (i=0; i<strlen(string); i++) {
num = atoi(string[i]);
while (num != 0) {
arr[j++] = num%2;
num = num/2;
tmp--;
}
while (tmp != 0) {
arr[j++] = 0;
tmp--;
}
j--;
for (k=i*4; k<(i*4+4); k++) {
result[k++] = arr[j--];
}
j = 0;
tmp = 4;
}
printf("The result is: \n");
for (i=0; i<4*strlen(result); i++) {
printf("%d",result[i]);
}
printf("\n");
}
int main() {
char c[8] = "12345678";
reduce(c);
return 0;
}
#包括
#包括
void reduce(字符字符串[]){
int i=0,j=0,k=0,cnt=0,tmp=4,num;
字符arr[4],结果[4*strlen(字符串)];
对于(i=0;i
使用intnum=atoi(c)
将字符串转换为整数
那就做吧
int binary[50];
int q = num,i=0;
while(q != 0)
{
binary[i++] = q%2;
q = q/2;
}
以相反的顺序打印二进制数组将具有二进制等价物。
完整程序:
#include<stdio.h>
int main(){
char c[100];
int num,q;
int binary[100],i=0,j;
scanf("%d",c);
num = atoi(c);
q = num;
while(q!=0){
binary[i++]= q % 2;
q = q / 2;
}
for(j = i -1 ;j>= 0;j--)
printf("%d",binary[j]);
return 0;
}
#包括
int main(){
charc[100];
int-num,q;
整数二进制[100],i=0,j;
scanf(“%d”,c);
num=原子(c);
q=num;
while(q!=0){
二进制[i++]=q%2;
q=q/2;
}
对于(j=i-1;j>=0;j--)
printf(“%d”,二进制[j]);
返回0;
}
使用intnum=atoi(c)
将字符串转换为整数
那就做吧
int binary[50];
int q = num,i=0;
while(q != 0)
{
binary[i++] = q%2;
q = q/2;
}
以相反的顺序打印二进制数组将具有二进制等价物。
完整程序:
#include<stdio.h>
int main(){
char c[100];
int num,q;
int binary[100],i=0,j;
scanf("%d",c);
num = atoi(c);
q = num;
while(q!=0){
binary[i++]= q % 2;
q = q / 2;
}
for(j = i -1 ;j>= 0;j--)
printf("%d",binary[j]);
return 0;
}
#包括
int main(){
charc[100];
int-num,q;
整数二进制[100],i=0,j;
scanf(“%d”,c);
num=原子(c);
q=num;
while(q!=0){
二进制[i++]=q%2;
q=q/2;
}
对于(j=i-1;j>=0;j--)
printf(“%d”,二进制[j]);
返回0;
}
在main()
中,执行以下操作之一
char c[ ] = "12345678";
或
如果要将c
用作字符串。否则,它没有足够的空间来存储终止的空字符
在这里,我冒昧地修改了相应的代码为您工作。检查下面的代码。希望它的自我解释
#include <stdio.h>
#include <string.h>
void reduce(char string[]) {
int i=0, j=0, k=0, cnt=0, count = 0; //count added, tmp removed
char arr[4], result[ (4*strlen(string) )+ 1], c; //1 more byte space to hold null
for (i=0; i<strlen(string); i++) {
c = string[i];
count = 4;
while (count != 0) { //constant iteration 4 times baed on 9 = 1001
arr[j++] = '0' + (c%2); //to store ASCII 0 or 1 [48/ 49]
c = c/2;
count--;
}
/* //not required
while (tmp >= 0) {
arr[j++] = 0;
tmp--;
}
*/
j--;
for (k=(i*4); k<((i*4) +4); k++) {
result[k] = arr[j--];
}
j = 0;
memset (arr, 0, sizeof(arr));
}
result[k] = 0;
printf("The result is: %s\n", result); //why to loop when we've added the terminating null? print directly.
/*
for (i=0; i< strlen(result); i++) {
printf("%c",result[i]);
}
printf("\n");
*/
}
int main() {
char c[ ] = "12345678";
reduce(c);
return 0;
}
在main()
char c[ ] = "12345678";
或
如果要将c
用作字符串。否则,它没有足够的空间来存储终止的空字符
在这里,我冒昧地修改了相应的代码为您工作。检查下面的代码。希望它的自我解释
#include <stdio.h>
#include <string.h>
void reduce(char string[]) {
int i=0, j=0, k=0, cnt=0, count = 0; //count added, tmp removed
char arr[4], result[ (4*strlen(string) )+ 1], c; //1 more byte space to hold null
for (i=0; i<strlen(string); i++) {
c = string[i];
count = 4;
while (count != 0) { //constant iteration 4 times baed on 9 = 1001
arr[j++] = '0' + (c%2); //to store ASCII 0 or 1 [48/ 49]
c = c/2;
count--;
}
/* //not required
while (tmp >= 0) {
arr[j++] = 0;
tmp--;
}
*/
j--;
for (k=(i*4); k<((i*4) +4); k++) {
result[k] = arr[j--];
}
j = 0;
memset (arr, 0, sizeof(arr));
}
result[k] = 0;
printf("The result is: %s\n", result); //why to loop when we've added the terminating null? print directly.
/*
for (i=0; i< strlen(result); i++) {
printf("%c",result[i]);
}
printf("\n");
*/
}
int main() {
char c[ ] = "12345678";
reduce(c);
return 0;
}
从您的示例中可以看出,您尝试的转换是二进制编码的十进制而不是二进制。在这种情况下,您的解决方案有点过于复杂;您只需将每个数字转换为其整数值,然后将位模式转换为ASCII1
和0
#include <stdio.h>
void reduce( const char* c )
{
for( int d = 0; c[d] != 0; d++ )
{
int ci = c[d] - '0' ;
for( unsigned mask = 0x8; mask != 0; mask >>= 1 )
{
putchar( (ci & mask) == 0 ? '0' : '1' ) ;
}
}
}
从您的示例中可以看出,您尝试的转换是二进制编码的十进制而不是二进制。在这种情况下,您的解决方案有点过于复杂;您只需将每个数字转换为其整数值,然后将位模式转换为ASCII1
和0
#include <stdio.h>
void reduce( const char* c )
{
for( int d = 0; c[d] != 0; d++ )
{
int ci = c[d] - '0' ;
for( unsigned mask = 0x8; mask != 0; mask >>= 1 )
{
putchar( (ci & mask) == 0 ? '0' : '1' ) ;
}
}
}
您可以使用下面的reduce函数
void reduce(char string[])
{
unsigned int in = atoi(string) ;
int i = 0, result[32],k,j;
while (in > 0) {
j = in % 10;
k = 0;
while (j > 0) {
result[i++] = j % 2;
j = j >> 1;
k++;
}
while (k < 4) {
result[i++] = 0;
k++;
}
in = in/10;
}
printf("Result\n");
for(--i;i >= 0; i--) {
printf("%d", result[i]);
}
printf("\n");
}
void reduce(字符字符串[])
{
无符号整数in=atoi(字符串);
int i=0,结果[32],k,j;
while(in>0){
j=单位为%10;
k=0;
而(j>0){
结果[i++]=j%2;
j=j>>1;
k++;
}
而(k<4){
结果[i++]=0;
k++;
}
in=in/10;
}
printf(“结果\n”);
对于(--i;i>=0;i--){
printf(“%d”,结果[i]);
}
printf(“\n”);
}
对于12345678
输出将是000100100010100001011001111000,其中每个字符都以二进制格式打印。您可以使用下面的reduce函数
void reduce(char string[])
{
unsigned int in = atoi(string) ;
int i = 0, result[32],k,j;
while (in > 0) {
j = in % 10;
k = 0;
while (j > 0) {
result[i++] = j % 2;
j = j >> 1;
k++;
}
while (k < 4) {
result[i++] = 0;
k++;
}
in = in/10;
}
printf("Result\n");
for(--i;i >= 0; i--) {
printf("%d", result[i]);
}
printf("\n");
}
void reduce(字符字符串[])
{
无符号整数in=atoi(字符串);
int i=0,结果[32],k,j;
while(in>0){
j=单位为%10;
k=0;
而(j>0){
结果[i++]=j%2;
j=j>>1;
k++;
}
而(k<4){
结果[i++]=0;
k++;
}
in=in/10;
}
printf(“结果\n”);
对于(--i;i>=0;i--){
printf(“%d”,结果[i]);
}
printf(“\n”);
}
对于12345678
输出将是000100100010100001011001111000,其中每个字符都以二进制格式打印。可能需要一些调整,但它会按原样完成工作
#include <stdio.h>
#include <stdlib.h>
int
main(void)
{
int i;
int n;
char *str = "12345678";
const int bit = 1 << (sizeof(n)*8 - 1);
n = atoi(str);
for(i=0; i < sizeof(n)*8 ; i++, n <<= 1)
n&bit ? printf("1") : printf("0");
return 0;
}
#包括
#包括
int
主(空)
{
int i;
int n;
char*str=“12345678”;
const int bit=1它可能需要一些调整,但它按原样工作
#include <stdio.h>
#include <stdlib.h>
int
main(void)
{
int i;
int n;
char *str = "12345678";
const int bit = 1 << (sizeof(n)*8 - 1);
n = atoi(str);
for(i=0; i < sizeof(n)*8 ; i++, n <<= 1)
n&bit ? printf("1") : printf("0");
return 0;
}
#包括
#包括
int
主(空)
{
int i;
int n;
char*str=“12345678”;
const int bit=1代码中有很多小错误,这使得很难确定单个错误。主要问题似乎是您将二进制数(0
,1
)与ASCII数字(“0”
,“1”
)混淆,并且错误地使用了字符串函数
正如其他地方提到的,charc[8]=..
是错误的
atoi(string[i])
无法工作;它需要的是字符串,而不是字符
arr[…]
获取值'num%2
,即一个数值。最好使用'0'+num%2
,因此它是一个字符串
在已递增k
的循环中,在result[k++]
中递增k
在打印之前,在末尾添加result[k]=0;
,以便strlen
正常工作
4*strlen(result)
太过分了--strlen
就是这样
您不妨执行一个简单的printf(“%s\n”,result);
代码中有很多小错误,这使得很难确定单个错误。主要问题似乎是您将二进制数(0
,1
)与ASCII数字(“0”
,“1”
)和ar混淆了