zoukankan      html  css  js  c++  java
  • 59任由制转换

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include<math.h>

    int 文本到整数(char * p_输入) {
     int l_几位数 = strlen(p_输入);
     int l_结果 = 0;
     int i = 0;
     if (p_输入[0] == '-') {
      i = 1;
     }

     for (; i < l_几位数; i++) {
      int l_倍数 = 1;
      for (size_t ii = i; ii < (l_几位数 - 1); ii++) {
       l_倍数 = l_倍数 * 10;
      }
      l_结果 = l_结果 + (p_输入[i] - 48)*l_倍数;
     }
     if (p_输入[0] == '-') {
      return -l_结果;
     }

     return l_结果;
    }


    char  十进制数字转十六进制字符(int l_十进制) {
     char l_十六进制字符 = 0;
     switch (l_十进制) {
     case 10:
      l_十六进制字符 = 'A';
      break;
     case 11:
      l_十六进制字符 = 'B';
      break;
     case 12:
      l_十六进制字符 = 'C';
      break;
     case 13:
      l_十六进制字符 = 'D';
      break;
     case 14:
      l_十六进制字符 = 'E';
      break;
     case 15:
      l_十六进制字符 = 'F';
      break;
     }
     return l_十六进制字符;
    }

    int  十六进制字符转十进制数字(char p_十六进制字符) {
     int l_十进制 = 0;
     switch (p_十六进制字符) {
     case 'A':
      l_十进制 = 10;
      break;
     case 'B':
      l_十进制 = 11;
      break;
     case 'C':
      l_十进制 = 12;
      break;
     case 'D':
      l_十进制 = 13;
      break;
     case 'E':
      l_十进制 = 14;
      break;
     case 'F':
      l_十进制 = 15;
      break;
     }
     return l_十进制;
    }

    void f_进制转换(int p_原始进制, char *p_原始数据, int p_目标进制, char *p_目标数据) {
     if ((p_原始进制 >= 2 && p_原始进制 <= 16) && (p_目标进制 >= 2 && p_目标进制 <= 16)) {


      //不管什么进制,一进入函数,一律转换为十进制.
      int l_十进制 = 0;
      int l_次方 = 0;
      if (p_原始进制 == 10) {
       l_十进制 = 文本到整数(p_原始数据);
      }
      else {
       l_次方 = strlen(p_原始数据) - 1;
       for (size_t i = 0; i < strlen(p_原始数据); i++) {
        if (p_原始数据[i] >= 48 && p_原始数据[i] <= 57) {
         l_十进制 = l_十进制 + (p_原始数据[i] - 48)*pow(p_原始进制, l_次方);
        }
        else {

         l_十进制 = l_十进制 + 十六进制字符转十进制数字(p_原始数据[i])*pow(p_原始进制, l_次方);
        }
        l_次方--;
       }

      }


      //利用求余法,转换进制,但输出结果都是反的.
      int l_商, l_余数, l_备份商;
      char l_反转目标进制[33] = { 0 };
      int l_索引 = 0;
      l_备份商 = l_十进制;

      do {
       l_商 = l_备份商 / p_目标进制;
       l_余数 = l_备份商 % p_目标进制;
       l_备份商 = l_商;
       if (l_余数 >= 0 && l_余数 <= 9) {
        l_反转目标进制[l_索引] = l_余数 + 48;
       }
       else {
        l_反转目标进制[l_索引] = 十进制数字转十六进制字符(l_余数);
       }

       l_索引++;

      } while (l_商 != 0);
      l_反转目标进制[l_索引] = '';

      //开始进行反转
      l_索引 = 0;
      for (int i = strlen(l_反转目标进制) - 1; i >= 0; i--) {
       p_目标数据[l_索引] = l_反转目标进制[i];
       l_索引++;
      }
      p_目标数据[l_索引] = '';

     }

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include<math.h>
    int 转换(char *输入) {
    int 几位数 = strlen(输入) - 1;
    int 结果;
    for (int i = 0; i < 几位数; i++)
    {
    int 倍数 = 1;
    for (int ii = 0; ii < 几位数 - i; ii++)
    {
    倍数 = 倍数 * 10;
    }
    结果 = 结果 + (输入[i] - 48) * 倍数;
    }
    return 结果;
    }
    int 转十进制字母(char 字母) {
    int 十进制 = 0;
    switch (字母) {
    case 'A':
    十进制 = 10;
    break;
    case 'B':
    十进制 = 11;
    break;
    case 'C':
    十进制 = 12;
    break;
    case 'D':
    十进制 = 13;
    break;
    case 'E':
    十进制 = 14;
    break;
    case 'F':
    十进制 = 15;
    break;
    }
    return 字母;
    }


    void 进制转换(char *原始数据, int 原始进制, int 目标进制, char *输出数据) {
    int 输出 = 0;
    int 次方 = strlen(原始数据) - 2;
    //二进制转换十进制
    //10111B = 1x24 + 0x23 + 1 x22 + 1 x21 + 1 x20 = 23
    //十六进制转换十进制
    //125H = 1×162+2×161+5×160=293D
    if (目标进制 == 10) {

    输出 = atoi(原始数据);
    }
    else {

    for (int i = 0; i < strlen(原始数据) - 1; i++)
    {

    if (原始数据[i] >= 48 && 原始数据[i] <= 57)
    {

    输出 = 输出 + (原始数据[i] - 48)*pow(目标进制, 次方);
    }
    else {
    输出 = 输出 + 转十进制字母(原始数据[i] - 48)*pow(目标进制, 次方);
    }
    次方--;
    }
    }
    printf("%d ", 输出);

    }
    void main() {
    char 原始数据[100] = { 0 };
    char 原始进制[5] = { 0 };
    char 目标进制[5] = { 0 };
    char 输出数据[100] = { 0 };
    printf("原始数据");
    fgets(原始数据, sizeof(原始数据), stdin);
    printf("原始进制");
    fgets(原始进制, sizeof(原始进制), stdin);
    printf("目标进制");
    fgets(目标进制, sizeof(目标进制), stdin);
    进制转换(原始数据, atoi(原始进制), atoi(目标进制), 输出数据);
    system("pause");


    }

  • 相关阅读:
    minio 注意事项
    vim编辑器的快捷命令
    kubernetes Label的增删改查
    JVM java堆内存
    navicat注册机
    hibernate学习笔记_基础配置
    Hibernate学习笔记_helloworld
    junit4初级
    Struts学习笔记_声明式异常处理
    Struts学习笔记_拦截器
  • 原文地址:https://www.cnblogs.com/xiaodaxiaonao/p/7896359.html
Copyright © 2011-2022 走看看