Chinaunix首页 | 论坛 | 博客
  • 博客访问: 928965
  • 博文数量: 177
  • 博客积分: 8613
  • 博客等级: 中将
  • 技术积分: 2835
  • 用 户 组: 普通用户
  • 注册时间: 2006-03-12 04:16
文章分类
文章存档

2012年(12)

2011年(24)

2010年(24)

2009年(75)

2008年(42)

我的朋友

分类: C/C++

2009-06-30 22:19:35

    今天的进制转换实现了10进制转换成2~9、16进制;2~9、16进制转换成10进制的功能,bi的同事给了在函数convert_n_to_10中,传字符串的建议,运行中总是出错,通过gdb调试出错误原因是字符没有减'0',快没有公交车了,贴一下程序,赶快回去了。。。时间过的真快啊

[root@bjxdurs235 c-study]# cat -n convert10_2_8_16.c
     1  #include
     2
     3  int hex_word(int n){
     4          switch (n){
     5                  case 10:
     6                          return 'A' ;
     7                          break;
     8                  case 11:
     9                          return 'B' ;
    10                          break;
    11
    12                  case 12:
    13                          return 'C' ;
    14                          break;
    15
    16                  case 13:
    17                          return 'D' ;
    18                          break;
    19
    20                  case 14:
    21                          return 'E' ;
    22                          break;
    23
    24                  case 15:
    25                          return 'F' ;
    26                          break;
    27
    28                  default :
    29                          return n;
    30
    31
    32          }
    33  }
    34
    35  int hex_char_to_num(char n){
    36          switch (n){
    37                  case 'A' :
    38                          return 10 ;
    39                          break ;
    40
    41                  case 'B' :
    42                          return 11 ;
    43                          break ;
    44
    45
    46                  case 'C' :
    47                          return 12 ;
    48                          break ;
    49
    50                  case 'D' :
    51                          return 13 ;
    52                          break ;
    53
    54                  case 'E' :
    55                          return 14 ;
    56                          break ;
    57
    58                  case 'F' :
    59                          return 15 ;
    60                          break ;
    61
    62                  default :
    63                          return 10 ;
    64          }
    65  }
    66
    67  int mypow(int x , int y){
    68          int i,result;
    69          result=1;
    70          for (i=0; i    71                  result*=x;
    72          }
    73          //printf("%d\n",temp);
    74          return result ;
    75  }
    76
    77  /* convert a decimal number to a 2/8/16 format */
    78  /* x is the system u convert to , y is the decimal number  */
    79
    80  void convert_10_to_n(int x, int y){
    81          int i=0;
    82          int a[100];
    83          while (y > 0){
    84                  a[i++] = y % x;
    85                  y = y / x;
    86          }
    87          for (i=i-1; i>=0; i--){
    88                  if (a[i] > 9){
    89                          printf("%c",hex_word(a[i]) );
    90                  }
    91                  else
    92                          printf("%d",a[i]);
    93          }
    94          printf("\n");
    95  }
    96
    97  /* convert a 2/8/16 format number to the decimal one */
    98
    99  int convert_n_to_10(int x, char *y){
   100          int sum = 0;
   101          int i;
   102          int len = strlen(y);
   103          //printf("len:%d\n",len);
   104          for (i=len; i>0; i--){
   105
   106                  if (y[i-1] > '9'){
   107                          sum += hex_char_to_num(y[i-1]) * mypow(x,len-i)  ;
   108                  }
   109                  else
   110                          sum += (y[i-1] - '0') * mypow(x,len-i);
   111          }
   112          printf("%d\n",sum);
   113
   114  }
   115
   116  int main(void)
   117  {
   118          convert_10_to_n(16,13);
   119          convert_n_to_10(8,"7246");
   120  }
阅读(525) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~