二进制转换十进制 (数组到字符串)

sun891123 2013-09-02 08:02:59
for( i = 1; i < 25; i++)
{
printk( "%d", card_buf[i] );
}
我这样遍历 打印的值是0011..0001(24位数据)这样的二进制数
求思路转成十进制

本来想定义一个 char str[30] , 用 str[i-1] = card_buf[i]; 但是%s打印出来的是乱码
请问可以直接在for里面转换么? 求思路。。谢谢

我是在内核里面,好像没有系统函数。
...全文
337 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
一根烂笔头 2013-09-10
  • 打赏
  • 举报
回复
ls 都干毛线呢,乱七八糟

unsigned long dem = 0;
for( i = 1; i < 25; i++)
 {
     dem += 2 * (dem + card_buf[i] - '0');    
 }
lm_whales 2013-09-10
  • 打赏
  • 举报
回复
int isnumof(int ch,int radix) { asert(radix>1); assert(radix<=36); if(radix<1)return 0; if(radix>36)return 0; if(<'0')return 0; if(ch>'z')return 0; if(radix<=10){ if(ch-'0' >=radix)return 0; else return 1;} else if(ch>='A' && ch< 'A'+ (radix - 10) )return 1; else if(ch>='a' && ch <'a'+(radix -10))return 1; return 0; } int digitof(int ch,int radix) { if(ch<='9' && ch>='0')return ch-'0'; if(ch<='Z' && ch>= 'A')return ch-'A'+10; if(ch<='z' && ch >='a')return ch-'a'+10; return -1; } int atoi_ex(char *s,int radix) { asert(radix>1); assert(radix<=36); assert(s); assert(*s); if(radix<=1)return -1; if(radix>36)return -1; if(!s)return -1; int n=0; while(*s && isnumof(*s,radix)) { n* = radix; n+ = digitof(*s,radix); s++; } return n; } ///////////////////////////// int main(){ char s[1024]; //printf("%s\n",itoa(atoi_ex(buf,2),s,10)); char buf[]="10100011010101010101"; printf("%d\n",atoi_ex(buf,2),s,10)); return 0; }
独孤的根号3 2013-09-09
  • 打赏
  • 举报
回复
赵老就是狠,一堆代码直接压下来
赵4老师 2013-09-09
  • 打赏
  • 举报
回复
引用 8 楼 u012006886 的回复:
赵老就是狠,一堆代码直接压下来
就是!比以前懒了。以前还先敲上四个字“仅供参考”,再Ctrl+V代码。
Willson_LEE 2013-09-07
  • 打赏
  • 举报
回复
引用 5 楼 zhao4zhong1 的回复:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <locale.h>
int main() {
    int i,v;
    char bs[33];
    char b[33];
    char hs[9];
    char h[9];
    char s[4];
    char *e;

// 十进制整数转二进制串;
    i=1024;
    ltoa(i,b,2);
    sprintf(bs,"%032s",b);
    printf("i=%d,bs=%s\n",i,bs);
// 十进制整数转十六进制串;
    i=1024;
    ltoa(i,h,16);
    sprintf(hs,"%08s",h);
    printf("i=%d,hs=%s\n",i,hs);
// 十六进制字符串转成十进制数
    strcpy(hs,"00000400");
    sscanf(hs,"%x",&i);
    printf("hs=%s,i=%d\n",hs,i);
// 二进制字符串转化为十六进制字符串;
    strcpy(bs,"00000000000000000000010000000000");
    i=strtol(bs,&e,2);
    ltoa(i,h,16);
    sprintf(hs,"%08s",h);
    printf("bs=%s,hs=%s\n",bs,hs);
// 二进制字符串转化为十进制数;
    strcpy(bs,"00000000000000000000010000000000");
    i=strtol(bs,&e,2);
    printf("bs=%s,i=%d\n",bs,i);
// 十六进制字符串转成二进制串
    strcpy(hs,"00000400");
    sscanf(hs,"%x",&i);
    ltoa(i,b,2);
    sprintf(bs,"%032s",b);
    printf("hs=%s,bs=%s\n",hs,bs);
// ASC\GBK字符串转十六进制串
    strcpy(s,"a汉");
    i=0;
    while (1) {
        if (0==s[i]) break;
        sprintf(hs+i*2,"%02X",(unsigned char)s[i]);
        i++;
    }
    setlocale(LC_ALL,"chs");
    printf("s=%s,hs=%s\n",s,hs);
// 十六进制字符串转成汉字(GBK)及字符(ASC)
    strcpy(hs,"61BABA");
    i=0;
    while (1) {
        if (1!=sscanf(hs+i*2,"%2x",&v)) break;
        s[i]=(char)v;
        i++;
    }
    s[i]=0;
    printf("hs=%s,s=%s\n",hs,s);

    return 0;

}
//i=1024,bs=00000000000000000000010000000000
//i=1024,hs=00000400
//hs=00000400,i=1024
//bs=00000000000000000000010000000000,hs=00000400
//bs=00000000000000000000010000000000,i=1024
//hs=00000400,bs=00000000000000000000010000000000
//s=a汉,hs=61BABA
//hs=61BABA,s=a汉
nextseconds 2013-09-05
  • 打赏
  • 举报
回复
引用 5 楼 zhao4zhong1 的回复:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <locale.h>
int main() {
    int i,v;
    char bs[33];
    char b[33];
    char hs[9];
    char h[9];
    char s[4];
    char *e;

// 十进制整数转二进制串;
    i=1024;
    ltoa(i,b,2);
    sprintf(bs,"%032s",b);
    printf("i=%d,bs=%s\n",i,bs);
// 十进制整数转十六进制串;
    i=1024;
    ltoa(i,h,16);
    sprintf(hs,"%08s",h);
    printf("i=%d,hs=%s\n",i,hs);
// 十六进制字符串转成十进制数
    strcpy(hs,"00000400");
    sscanf(hs,"%x",&i);
    printf("hs=%s,i=%d\n",hs,i);
// 二进制字符串转化为十六进制字符串;
    strcpy(bs,"00000000000000000000010000000000");
    i=strtol(bs,&e,2);
    ltoa(i,h,16);
    sprintf(hs,"%08s",h);
    printf("bs=%s,hs=%s\n",bs,hs);
// 二进制字符串转化为十进制数;
    strcpy(bs,"00000000000000000000010000000000");
    i=strtol(bs,&e,2);
    printf("bs=%s,i=%d\n",bs,i);
// 十六进制字符串转成二进制串
    strcpy(hs,"00000400");
    sscanf(hs,"%x",&i);
    ltoa(i,b,2);
    sprintf(bs,"%032s",b);
    printf("hs=%s,bs=%s\n",hs,bs);
// ASC\GBK字符串转十六进制串
    strcpy(s,"a汉");
    i=0;
    while (1) {
        if (0==s[i]) break;
        sprintf(hs+i*2,"%02X",(unsigned char)s[i]);
        i++;
    }
    setlocale(LC_ALL,"chs");
    printf("s=%s,hs=%s\n",s,hs);
// 十六进制字符串转成汉字(GBK)及字符(ASC)
    strcpy(hs,"61BABA");
    i=0;
    while (1) {
        if (1!=sscanf(hs+i*2,"%2x",&v)) break;
        s[i]=(char)v;
        i++;
    }
    s[i]=0;
    printf("hs=%s,s=%s\n",hs,s);

    return 0;

}
//i=1024,bs=00000000000000000000010000000000
//i=1024,hs=00000400
//hs=00000400,i=1024
//bs=00000000000000000000010000000000,hs=00000400
//bs=00000000000000000000010000000000,i=1024
//hs=00000400,bs=00000000000000000000010000000000
//s=a汉,hs=61BABA
//hs=61BABA,s=a汉
赵4老师 2013-09-03
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <locale.h>
int main() {
    int i,v;
    char bs[33];
    char b[33];
    char hs[9];
    char h[9];
    char s[4];
    char *e;

// 十进制整数转二进制串;
    i=1024;
    ltoa(i,b,2);
    sprintf(bs,"%032s",b);
    printf("i=%d,bs=%s\n",i,bs);
// 十进制整数转十六进制串;
    i=1024;
    ltoa(i,h,16);
    sprintf(hs,"%08s",h);
    printf("i=%d,hs=%s\n",i,hs);
// 十六进制字符串转成十进制数
    strcpy(hs,"00000400");
    sscanf(hs,"%x",&i);
    printf("hs=%s,i=%d\n",hs,i);
// 二进制字符串转化为十六进制字符串;
    strcpy(bs,"00000000000000000000010000000000");
    i=strtol(bs,&e,2);
    ltoa(i,h,16);
    sprintf(hs,"%08s",h);
    printf("bs=%s,hs=%s\n",bs,hs);
// 二进制字符串转化为十进制数;
    strcpy(bs,"00000000000000000000010000000000");
    i=strtol(bs,&e,2);
    printf("bs=%s,i=%d\n",bs,i);
// 十六进制字符串转成二进制串
    strcpy(hs,"00000400");
    sscanf(hs,"%x",&i);
    ltoa(i,b,2);
    sprintf(bs,"%032s",b);
    printf("hs=%s,bs=%s\n",hs,bs);
// ASC\GBK字符串转十六进制串
    strcpy(s,"a汉");
    i=0;
    while (1) {
        if (0==s[i]) break;
        sprintf(hs+i*2,"%02X",(unsigned char)s[i]);
        i++;
    }
    setlocale(LC_ALL,"chs");
    printf("s=%s,hs=%s\n",s,hs);
// 十六进制字符串转成汉字(GBK)及字符(ASC)
    strcpy(hs,"61BABA");
    i=0;
    while (1) {
        if (1!=sscanf(hs+i*2,"%2x",&v)) break;
        s[i]=(char)v;
        i++;
    }
    s[i]=0;
    printf("hs=%s,s=%s\n",hs,s);

    return 0;

}
//i=1024,bs=00000000000000000000010000000000
//i=1024,hs=00000400
//hs=00000400,i=1024
//bs=00000000000000000000010000000000,hs=00000400
//bs=00000000000000000000010000000000,i=1024
//hs=00000400,bs=00000000000000000000010000000000
//s=a汉,hs=61BABA
//hs=61BABA,s=a汉
就是那个党伟 2013-09-02
  • 打赏
  • 举报
回复
楼上有理。 二进制转十进制,自己写个函数就行吧
图灵狗 2013-09-02
  • 打赏
  • 举报
回复
打印的时候不想出现乱码的话,可以加上‘0’,注意1和‘1’是不一样的。
引用 楼主 sun891123 的回复:
for( i = 1; i < 25; i++) { printk( "%d", card_buf[i] ); } 我这样遍历 打印的值是0011..0001(24位数据)这样的二进制数 求思路转成十进制 本来想定义一个 char str[30] , 用 str[i-1] = card_buf[i]; 但是%s打印出来的是乱码 请问可以直接在for里面转换么? 求思路。。谢谢 我是在内核里面,好像没有系统函数。
AnYidan 2013-09-02
  • 打赏
  • 举报
回复
网上大把,google
max_min_ 2013-09-02
  • 打赏
  • 举报
回复

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧