精华内容
下载资源
问答
  • 十六进制转八进制过程
    万次阅读 多人点赞
    2019-03-02 13:09:57

    十六进制转八进制

    #分析+算法实现+代码+测试数据
    #技巧:分析+处理+调试(大不了就调试)

    分析

    这个题是蓝桥杯的一道练习题,对于十六进制转八进制的话,是可以通用的。
    题目的描述大概是这样的:给n个十六进制数,n<=10,每个数的长度不超过10000。

    这里涉及到字符型以及string类类类型,待会再强调。


    下面分析一下此题:
    要想把十六进制转成八进制,首先想到把十六进制转成二进制再转成八进制。
    于是,如何把十六进制数转化成二进制01呢?首先想到的是偷懒,直接利用
    c语言的scanf和printf类型转换,真特么容易!

    哦,差点忘掉了,每个十六进制数的长度不超过一万!其实,我看到这里就
    呵呵了,不是我不会,是懒的写,字符串的一些操作太繁琐,有些细节还要
    耐心的处理,很容易就把一个人清晰的脑袋拧成一股麻绳,各种自我质疑,
    不过不要着急,所以保持冷静,这种题还是很容易的,相信自己。
    经过分析,这道题的算法倒是很容易,如下:

    每一个十六进制的值都可以转化成4位二进制值,每三个二进制值组成一个八进制值,所以,先把十六进制转换成01的二进制字串,然后把01串转化成八进制。


    算法实现

    因为十六进制总共就十六个字符,这里使用switch对应01码进行选择,然后对string对象str作+运算,逐个转换成4位的01码存入到string的对象str中,直到全部转化成二进制代码。

    然后把二进制字串的长度*4%3求出存入一个变量r中。
    如何求string类类型的长度呢?
    1 str.length();
    2 str.size();

    接着有一个优化技巧可以使用,(优化技巧)就是这个
    01串开始转化八进制的时候该从哪开始?
    如果余数为零,对谁取余从谁开始,否则从余数开始。

    这个是我对代码进行优化后发现的。

    然后就是如何转化成八进制的整数输出呢?当然是看01码了。因为每三位一组成一个八进制值,使用一个变量ans记录在三位中的哪个位上,使用sum+=pow(2,ans)转化成数值,每执行完一组,ans和sum归初值。每次输出sum值,最终输出的就是目标的八进制。

    因为是多组输入数据,而只定义了两个string的对象对整个程序进行操作,所以
    string类类型的对象如何清零呢?
    1 str.clear()//使用clear()函数;
    2 str="";//赋空

    小插曲(可以不看,为了拧回博主的脑回路而写)

    之前我常常会把string类类型char型混用,如今我终于弄明白了。

    比如:
    之前我会这样写,scanf输出string类型的对象值。
    string str;printf("%s",str);
    哎?为什么会报错?

    或者说会写成这样,使用c的函数企图得到string型对象的长度。
    string str; int len=strlen(str);

    后来的后来,我终于明白了,之前学习c的时候顺带学的c++,我一直把这string 和 char型的东西当成一家的,其实,他们只是有关系,但是不是一家的,东西也不能乱串使用,string是字符串类类型。

    (这里我使的是string类型的对象对字符串进行操作。)

    代码

    //利用switch+string类型
    //注意字符串要双引号
    
    #include<stdio.h>
    #include<iostream>
    #include<string>
    #include<string.h>
    #include<math.h>
    using namespace std;
    int main(){
        int n;
        string str_temp,str_in;
        scanf("%d",&n);
        for(int i=0;i<n;i++)
        {
            str_in="";
            str_temp="";//给字符串赋空
    
            cin>>str_in;
            int len=str_in.length();
    
            for(int j=0;j<len;j++){
                switch(str_in[j]){
                    case '0': str_temp+="0000";break;
                    case '1': str_temp+="0001";break;
                    case '2': str_temp+="0010";break;
                    case '3': str_temp+="0011";break;
                    case '4': str_temp+="0100";break;
                    case '5': str_temp+="0101";break;
                    case '6': str_temp+="0110";break;
                    case '7': str_temp+="0111";break;
                    case '8': str_temp+="1000";break;
                    case '9': str_temp+="1001";break;
                    case 'A': str_temp+="1010";break;
                    case 'B': str_temp+="1011";break;
                    case 'C': str_temp+="1100";break;
                    case 'D': str_temp+="1101";break;
                    case 'E': str_temp+="1110";break;
                    case 'F': str_temp+="1111";break;
                    default: break;
                }
            }
            //cout<<str_temp<<endl;
            //把01串转化成目标串
            int len_s=str_temp.length();
            int ans=2;
            int sum=0;
            int r=len*4%3;
    
            if(r==1){
                if(str_temp[0]=='1')
                    printf("1");
            }
            else if(r==2){
                if(str_temp[0]=='0'&&str_temp[1]=='1')
                    printf("1");
                else if(str_temp[0]=='1'&&str_temp[1]=='0')
                    printf("2");
                else if(str_temp[0]=='1'&&str_temp[1]=='1')
                    printf("3");
            }
            else{
                if(str_temp[0]=='0'&&str_temp[1]=='0'&&str_temp[2]=='0')
                    r=3;
            }
    
            for(int i=r;i<len_s;i++)
                {
                    if(str_temp[i]=='1')
                        sum+=pow(2,ans);
                    ans--;
                    if(ans==-1)
                    {
                        printf("%d",sum);
                        ans=2;
                        sum=0;
                    }
                }
            printf("\n");
        }
    }
    

    测试数据

    输入
    2
    39
    123ABC

    输出
    71
    4435274

    更多相关内容
  • 主要介绍了使用Python内置函数:bin()、oct()、int()、hex()可实现进制转换的一些用法,需要的朋友可以参考下
  • 十六进制转八进制

    2020-01-26 21:28:36
    BASIC-12 十六进制转八进制 1. 问题 2. 代码 import java.util.Scanner; /** * 十六进制转八进制 * 十六进制15 转换成二进制1111 1+2+4+8 * 16:F 10:15 8:17 2'8': 0001:1011 17 1111 * 16:9 10:9 8:12 2'8...

    BASIC-12 十六进制转八进制

    1. 问题

    image.png

    2. 代码

    import java.util.Scanner;
    
    /**
     * 十六进制转八进制
     * 	十六进制15	转换成二进制1111 1+2+4+8
     * 	16:F 10:15 8:17 2'8': 0001:1011	17	1111
     * 	16:9 10:9 8:12 2'8': 0001:0010	12	1001
     * 	16:6 10:6 8:06 2'8': 0000:0110	6	0110
     * 		111 110 010 110
     * @author 蔡先生
     * hexadecimal
     * octal
     * binary
     * hexTobin
     * binTooct
     */
    public class Basic12x {
    	private static final String[] strs={"0000","0001","0010","0011","0100","0101","0110","0111","1000","1001","1010",
    			"1011","1100","1101","1110","1111"};
    	public static void main(String[] args) {
    		Scanner in = new Scanner(System.in);
    		int n = in.nextInt();
    		String[] strs = new String[n];
    		for (int i = 0; i < n; i++) {
    			strs[i] = in.next();
    		}
    		in.close();
    		for (int i = 0; i < n; i++) {
    			StringBuilder result = new StringBuilder();		
    			result = hexTobin(strs[i]);
    			binTooct(result);	
    		}
    	}
    	public static void binTooct(StringBuilder str) {
    		StringBuilder result = new StringBuilder();
    		for (int i = 0; i < str.length()-2; i+=3) {
    			result.append(switchsO(str.substring(i, i+3)));
    		}
    		if ("0".equals(result.substring(0,1))) {
    			System.out.println(result.substring(1));
    			return;
    		}
    		System.out.println(result);
    	}
    	public static StringBuilder hexTobin(String str) {
    		StringBuilder result = new StringBuilder();
    		for (int i = 0; i < str.length(); i++) {
    			result.append(switchH(str.charAt(i)));
    		}
    		int length = result.length();
    		if (length % 3 != 0 ) {
    			int n = length%3;
    			switch (n) {
    			case 1:
    				result.insert(0,"00");
    				break;
    			case 2:
    				result.insert(0,"0");
    				break;
    			}
    		}
    		return result;
    	}
    	public static String switchH(char c) {
    		switch (c) {
    		case '0':
    			return strs[0];
    		case '1':
    			return strs[1];
    		case '2':
    			return strs[2];
    		case '3':
    			return strs[3];
    		case '4':
    			return strs[4];
    		case '5':
    			return strs[5];
    		case '6':
    			return strs[6];
    		case '7':
    			return strs[7];
    		case '8':
    			return strs[8];
    		case '9':
    			return strs[9];
    		case 'A':
    			return strs[10];
    		case 'B':
    			return strs[11];
    		case 'C':
    			return strs[12];
    		case 'D':
    			return strs[13];
    		case 'E':
    			return strs[14];
    		case 'F':
    			return strs[15];
    		}
    		return "";
    	}
    	public static String switchsO(String s) {
    		switch (s) {
    		case "000":
    			return "0";
    		case "001":
    			return "1";
    		case "010":
    			return "2";
    		case "011":
    			return "3";
    		case "100":
    			return "4";
    		case "101":
    			return "5";
    		case "110":
    			return "6";
    		case "111":
    			return "7";
    		}
    		return "";
    	}
    }
    

    3. 理解

    image.png
    这个提示很重要!
    之前写的时候写成了通过十进制转化的,但是如题目给的数据范围远远超过了long,所以就只能被out。这还是很难的!所以直接利用二进制还是非常好的!
    关键是转化过程中的细节!

    要注意equals和==的使用,两个是完全不同的东西。
    详细关注这个链接:链接

    展开全文
  • 十六进制转八进制c++代码Read: 8051 Microcontroller programming using Keil Uvision IDE 阅读: 使用Keil Uvision IDE进行8051单片机编程 将HEX文件上传到微控制器 (Uploading a HEX file to Microcontroller) ...

    十六进制转八进制c++代码

    Read: 8051 Microcontroller programming using Keil Uvision IDE

    阅读: 使用Keil Uvision IDE进行8051单片机编程

    将HEX文件上传到微控制器 (Uploading a HEX file to Microcontroller)

    Once you have developed the hex code for the program which is to upload to the microcontroller, the next major task is to burn the hex code properly into the device. If the microcontroller has an inbuilt bootloader then it is possible to upload the code using the serial port. Mostly you will require a USBASP programmer to dump your code. The programmer is a hardware device that contains inbuilt software to assist in transferring of codes to a microcontroller via PC.

    为要上传到微控制器的程序开发十六进制代码后,下一个主要任务是将十六进制代码正确刻录到设备中。 如果微控制器具有内置的引导程序,则可以使用串行端口上载代码。 通常,您将需要USBASP程序员来转储代码。 编程器是一种硬件设备,其中包含内置软件,以帮助通过PC将代码传输到微控制器。

    Here, we will be using ATMEL 8051 AVR USB ISP Programmer for burning our required code.

    在这里,我们将使用ATMEL 8051 AVR USB ISP编程器来刻录所需的代码。

    ATMEL 8051 AVR USB ISP Programmer

    ProgISP (ProgISP)

    • It is a tool through which you can perform code uploading on all AVR chips, it also supports AT89S51, AT89S52.

      它是您可以在所有AVR芯片上执行代码上传的工具,它还支持AT89S51,AT89S52。

    • Custom serial download programming.

      自定义串行下载编程。

    • Supports custom programmed chips.

      支持定制的编程芯片。

    • Supports high voltage programmers.

      支持高压编程器。

    • Project Management.

      项目管理。

    • Standalone tool – No installation required.

      独立工具–无需安装。

    USB ISP编程器的功能 (Features of USB ISP Programmer)

    • Supports multiple platforms linux, Mac OS and Windows.

      支持多种平台的linux,Mac OS和Windows。

    • Jumper for 5V supply.

      5V电源跳线。

    • Contains Header Pin for easy interface of various ISP header pin.

      包含Header Pin,可轻松连接各种ISP Header引脚。

    • SCK option to support target with low clock speed.

      SCK选项可支持低时钟速度的目标。

    将十六进制代码上传到微控制器的步骤 (Steps to upload HEX code to microcontroller)

    1. Download ProgISP, which is a zip file. Extract it in a folder. No need to install it, it is a self-executable software, click on progisp.exe to launch it.

      下载ProgISP,它是一个zip文件。 将其解压缩到一个文件夹中。 无需安装,它是可自行执行的软件,单击progisp.exe以启动它。

    2. USBASP should be connected to the AVR microcontroller development board using the 6 pin connectors. Make sure jumper J1 is connected.

      应使用6针连接器将USBASP连接到AVR微控制器开发板。 确保已连接跳线J1。

    3. Check the program state in the progisp interface, it should show colored icons of USB and ASP or else if it is faded then look for errors in connections, power supply or jumper connection.

      在progisp界面中检查程序状态,它应显示USB和ASP的彩色图标,否则,如果其褪色,则查找连接,电源或跳线连接中的错误。

    4. Select the type of chip you are working within our case it is AT89S52.

      在我们的案例中,选择要工作的芯片类型为AT89S52。

    5. In the task, windows look for the following to be checked with a tick.

      在任务中,窗口查找要打勾的项目。

      • Verify Signature
      • Chip Erase
      • Program Flash
      • Verify Flash
    6. Click on load flash from the leftmost tab, this tab is used to load the hex file. Click on the tab and locate the hex file.

      单击最左侧选项卡上的加载闪存,此选项卡用于加载十六进制文件。 单击选项卡并找到十六进制文件。

    7. Now click on Auto to begin the burning process. All the options which you have ticked from the task box will be performed during the process.

      现在单击自动开始刻录过程。 您在任务框中打勾的所有选项将在此过程中执行。

    8. Your code is successfully transferred to the microcontroller.

      您的代码已成功传输到微控制器。

    9. In order to erase the code, untick all options from task box except Chip Erase.

      为了清除该代码,请取消选中任务框中除“芯片擦除”之外的所有选项。

    How to upload HEX code to microcontrollers?

    翻译自: https://www.includehelp.com/embedded-system/how-to-upload-hex-code-to-microcontrollers.aspx

    十六进制转八进制c++代码

    展开全文
  • 蓝桥杯 基础练习 十六进制转八进制 C语言

    试题 基础练习 十六进制转八进制

    问题描述

    给定n个十六进制正整数,输出它们对应的八进制数。

    输入格式

    输入的第一行为一个正整数n (1<=n<=10)。
    接下来n行,每行一个由09、大写字母AF组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。

    输出格式

    输出n行,每行为输入对应的八进制正整数。

    【注意】
      输入的十六进制数不会有前导0,比如012A。
      输出的八进制数也不能有前导0。

    样例输入

    2
    39
    123ABC

    样例输出

    71
    4435274

    提示

    根据题目提示,可以先将十六进制的数值转化为二进制,再把相应的二进制转换为对应的八进制,在转化期间要注意二进制转八进制要从后往前每三位转化,不足的位置补零,最后将转化成的八进制前面的空位的‘0’消掉;

    具体过程如下

    #include<stdio.h>
    #include<string.h>
    int main()
    {
        char h[1000],b[1000],e[1000];
        int n;
        scanf("%d",&n);
        while(n--)
        {
            scanf("%s",h);
            int i,len=0;
            //将16进制转换为二进制,从后向前展开
            for(i=strlen(h)-1;i>=0;i--)
            {
                int v;
                if(h[i]>='0'&&h[i]<='9')
                {
                    v=h[i]-'0';
                }
                else
                {
                    v=h[i]-'A'+10;
                }
                for(int j=0;j<4;j++)
                {
                    b[len++]=v%2+'0';
                    v/=2;
                }
            }
            b[len]='\0';
            printf("%s\n",b);
            //输出中间二进制表示(逆序)
            int x=0,cnt=1;
            int l=0;
            for(i=0;i<len;i++)
            {
                //每三位二进制转化为一位八进制,不足三位补零
                if(cnt==4||i==len-1)
                {
                    x=cnt*(b[i]-'0')+x;
                    cnt=1;
                    e[l++]=x+'0';
                    x=0;
                }
                else
                {
                    x=cnt*(b[i]-'0')+x;
                    cnt=cnt*2;
                }
            }
            i=l-1;
            while(i>=0&&e[i]=='0')
                i--;
            if(i<0)
                printf("0");
            else
            {
                for(;i>=0;i--)
                    printf("%c",e[i]);
            }
            printf("\n");
        }
        return 0;
    }
    
    
    展开全文
  • 进制转换:二进制、八进制十六进制、十进制之间的转换 不同进制之间的转换在编程中经常会用到,尤其是C语言。 将二进制、八进制十六进制转换为十进制 二进制、八进制十六进制向十进制转换都非常容易,就是...
  • 十进制转八进制: 十进制转十六进制: 不同进制之间的相互转换 练一练手: 二进制十进制 十进制原理: 为了方便学习二进制,我们先来看一下十进制的原理,十进制的特点就是有10个符号来表示一个...
  • 二进制 二进制就是计算机常用的进制,即逢二进一。例如:1010 八进制 八进制即逢八进一。例如:626 ...十进制就是我们在计算中常用的进制,所以就...1.二进制转八进制 拿二进制数10010110举例 首先需要3个二进...
  • 一开始看到这个题目我认为比较简单,不顾题目的疯狂暗示的“先将十六进制数转换成某进制数,再由某进制数转换成八进制。”的提示,自己的想法是把16进制先转化为10进制,再从10进制转化为8进制。用了Java自带的函数...
  • 进制转R进制进制转进制进制整数进制进制整数转换成二进制采用“除2倒取余”,十进制小数转换成二进制小数采用“乘2取整”。 例题: 135D = __ B 解析:如下图所示,将135除以2,得余数,直到...
  • 将二进制、八进制十六进制转换为十进制 二进制、八进制十六进制向十进制转换都非常容易,就是“按权相加”。所谓“权”,也即“位权”。 假设当前数字是 N 进制,那么: 对于整数部分,从右往左看,第 i 位的...
  • 十六进制转八进制(C语言版)

    万次阅读 2017-12-29 19:40:27
     给定n个十六进制正整数,输出它们对应的八进制数。 输入格式  输入的第一行为一个正整数n (1  接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过...
  • 文章目录1.1 常见的进制1.2 进制间如何转换1.3 十进制转换成其它进制1.4 其它进制转换成十进制1.5 二进制转换成十六进制(第一种方法)1.6 二进制转换成十六进制(第二种方法)1.7 十六进制转换成二进制(第...
  •  输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。 输入格式  输入一行,包含一个正整数n。 输出格式  按从小到大的顺序输出满足条件的整数,每个整数占一行。 样例输入 52 样例...
  • 十进制转八进制:Integer.toOctalString(); 十进制转十六进制:Integer.tohexString(); class BaseSystemDemo1 { public static void main(String[] args) { //十进制其他进制 //1.使用java API实现 //十...
  • 二进制、八进制十六进制的转换

    千次阅读 2019-09-29 17:26:34
    进制转换 进制转换是人们利用符号来技术的方法。 进制转换由一组数码符号和两个基本因素“基数”与“位权”构成...一:(二,十六进制十进制 方法:假设我们要将n进制转换为十进制,首先我们从n进制的右边为...
  • 二进制、八进制、十进制、十六进制关系及转换

    万次阅读 多人点赞 2019-02-21 21:20:22
    二进制,八进制,十进制,十六进制之间的关系是什么?浮点数是什么回事? 本文内容参考自王达老师的《深入理解计算机网络》一书&amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;中国水利水电出版社&amp;amp;amp;amp...
  • 1、背景(Contexts)之前使用SQL把十进制的整数转换为三十六进制,SQL代码请参考:SQL Server 进制转换函数,其实它是基于二、、十、十六进制转换的计算公式的,进制之间的转换是很基础的知识,但是我发现网络上没有...
  • 上节我们对二进制、八进制十六进制进行了说明,本节重点讲解不同进制之间的转换,这在编程中经常会用到,尤其是C语言。 将二进制、八进制十六进制转换为十进制 二进制、八进制十六进制向十进制转换都非常...
  • 十进制转换为八进制十六进制

    千次阅读 2017-05-22 14:25:05
    》十进制转换为八进制  #间接转换:先将十进制转换成二进制,然后在由二进制转换成八进制。  #将十进制数除以8取余,直到商为0或1时停止,然后把余数倒序排列。  示 例:将十进制数50转换...》十进制转换为十六进制
  • 蓝桥杯-十六进制转八进制(Java)

    千次阅读 2022-01-14 20:13:20
    蓝桥杯训练题目-十六进制转八进制,写入了我的尝试和写题时的思考,希望能给大家带来帮助
  • 本题关键是两个部分,一个是将16进制转化为2进制存储,然后再将2进制数转化为8进制进行存储,另外注意末尾不足3位的情况和去掉8进制前导为0的情况就行了,一个子函数用来计算2的n次方,易错点:忘了初始化存储数字的...
  • 我们处理的整数通常用十进制表示,在计算机内存中是以二进制补码形式存储,但通常二进制表示的整数比较长,为了便于在程序设计过程中理解和处理数据,通常采用八进制十六进制,缩短了二进制补码表示的整数,但保持...
  • 将二进制、八进制十六进制转换为十进制二进制、八进制十六进制向十进制转换都是非常容易的,就是“按权相加”。所谓“权”,也即“位权”。例如:8546=8 * 10 ^ 3 + 5 * 10 ^ 2 + 4 * 10 ^ 1 + 6 * 10^ 0=8000+...
  • 蓝桥杯——十六进制转八进制,Java,基础练习
  • 进制的定义: 二进制数据是用0和1两个数码来表示的数。它的基数为2,进位规则是...①二转八 转换方法:以三位为分割,进行转换 例子: 计算过程: 前三位的100转换为0*2^0+0*2^1+1*2^2=4 后三个的001...
  • 概述 十进制:逢十进一,生活中常用的数值。... 十六进制:逢十六进一,采用0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F十六个数字,A-F分别表示十进制中的10-15,在编程语言中常用0x开头来表示十六进制数...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 61,407
精华内容 24,562
关键字:

十六进制转八进制过程

友情链接: Modbus客户机.rar