关于2进制直接转16进制

实际中估计也没有这个需求,只是写写。

能不能直接由2进制转为16进制呢,最直接的办法是通过位移操作,也就是通常所说的 每四位二进制对应一个16进制,

假如java中有一种 二进制的基础类型 Binary bi = new Binary(11010101);这样的话 进行 bi >>> 4 位移操作 就可以很容易转换了,关于这个可以参考Integer.java中的toHexString(int i)方法.

但是没有这种类型,java中貌似没有直接转化的方法,也就只能先转为10进制,再转为16进制。

写下自己实现的比较笨的办法:

法1:和Integer源码中的进制转换在某些思路上类似

/**
     * 10 0010 1111 按每4个一组分开,在binarys[]中找到对应的下标idx,对应的hexs[idx]相连接。
     * @param binaryStr 10 0010 1111
     * @return  hexStr 22F
     */
        public static String binaryToHex(String binaryStr){
        String binarys[] = new String[]{
                "0000","0001","0010","0011",
                "0100","0101","0110","0111",
                "1000","1001","1010","1011",
                "1100","1101","1110","1111"
                };
        String hexs[] = new String[]{
                "0","1","2","3",
                "4","5","6","7",
                "8","9","A","B",
                "C","D","E","F"
        };
        int n = binaryStr.length()%4;
        if(n != 0){
            int zeroNum = 0;
            zeroNum = 4 - n;
            for(int i=0; i< zeroNum; i++){
                binaryStr = "0"+binaryStr;
            }
            n = n+1;
        }
        String hexStr = "";
        for(int j=0; j<binaryStr.length()/4; j++){
            String temp = binaryStr.substring(j*4, (j+1)*4);
            int index = -1;
            for(int k=0;k<16;k++){
                if(binarys[k].equals(temp)){
                    index = k;
                }
            }
            if(index != -1){
                hexStr = hexStr + hexs[index];
            }
        }

        return hexStr;
    }

法2:和法1只有一点区别

/**
 * 10 0010 1111 按每4个一组分开,转化为int型数据index,然后hexs[index]相加。
 * @param binaryStr 10 0010 1111
 * @return hexStr 22F
 */
public static String binaryToHex2(String binaryStr){

    String hexs[] = new String[]{
            "0","1","2","3",
            "4","5","6","7",
            "8","9","A","B",
            "C","D","E","F"
    };
    int n = binaryStr.length()%4;
    if(n != 0){
        int zeroNum = 0;
        zeroNum = 4 - n;
        for(int i=0; i< zeroNum; i++){
            binaryStr = "0"+binaryStr;
        }
        n = n+1;
    }
    String hexStr = "";
    for(int j=0; j<binaryStr.length()/4; j++){
        String temp = binaryStr.substring(j*4, (j+1)*4);

        int index =0;//下标 index=15,则对应输出 hexs[15] = F
        int i = 3;
        for(char c : temp.toCharArray()) {
            String str = new String(new char[]{c});
            index = index + ((Integer.parseInt(str))<<i) ;
            i--;
        }
        hexStr = hexStr + hexs[index];
    }

    return hexStr;

}

上面的方法感觉执行效率不高,涉及到字符串的操作

时间: 2024-08-09 22:01:43

关于2进制直接转16进制的相关文章

超级(无限)大的 --- 整型10进制数据与16进制数据相互转换

<html> <title>超级(无限)大的 --- 整型10进制数据与16进制数据相互转换</title> <head> <meta charset="utf-8"/> <meta name="keywords" content="数据压缩算法,超过整数表示范围的大数据算术运算,大进制数据互相转换" /> <meta name="keywords"

自定义函数实现10进制转化为16进制

把结果都列出来,可以提升代码运行速率 #include<stdio.h> char hex_char(unsigned int n) { switch(n) { case 0: return '0'; case 1: return '1'; case 2: return '2'; case 3: return '3'; case 4: return '4'; case 5: return '5'; case 6: return '6'; case 7: return '7'; case 8:

10进制数转为16进制

问题 输入一个10进制数,输出这个10进制数对应的16进制数 思路 首先用10进制数除以16,余数则为不能进位的数字,则写在最低位上,商的含义是有多少个16,如果商大于等于16的话,意味还可以接着进位,那么用商接着除以16,余数写在倒数第二位上--以此进行下去,直到不能进位为止 代码 #include <iostream> #include<string> using namespace std; string m = "0123456789ABCDEF"; i

MFC 编辑框输入16进制字符串转换为16进制数或者10进制数据计算

1.编辑框添加变量,并选择变量类型为CString. 2.  使用"_tcstoul"函数将Cstring 类型转换为16进制/10进制数进行计算. 原文地址:https://www.cnblogs.com/lize19940412/p/10068273.html

10进制转化为16进制以内的转化

进制转化问题十进制转化为其它进制应该是比较简单的问题,就是一个%和/的问题,模之后再除就ok了 1 int a[1000]; 2 char c[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; 3 int main() 4 { 5 int m,n,i,t,k; 6 printf("十进制数:"); 7 scanf("%d",&n); 8 printf("多少进制

Java中将10进制转换成16进制

import java.util.Scanner; public class Decimal2HexConversion {     public static void main(String[] args){         Scanner input = new Scanner(System.in);         System.out.print("输入一个十进制数: ");         int decimal = input.nextInt();         Sys

c# 字符串(含有汉字)转化为16进制编码(转)

public static string Str2Hex(string s) { string result = string.Empty; byte[] arrByte = System.Text.Encoding.GetEncoding("GB2312").GetBytes(s); for(int i = 0; i < arrByte.Length; i++) { result += "&#x" + System.Convert.ToString(

ASCII码与16进制的互相转换(表)

所谓的ASCII和16进制都只是概念上的东西,在计算机中通通是二进制 转换应该是输出的转换,同样是一个数,在计算机内存中表示是一样的,只是输出不一样ASCII是针对字符的编码,几乎是键盘上的字符的编码.下面是一张ASCII和16进制的对应表: ASCII与16进制转换 ASCII 16进制 ASCII 16进制 ASCII 16进制 ASCII 16进制 NUL 00H DLE 10H SP 20H 0 30H SOH 01H DC1 11H ! 21H 1 31H STX 02H DC2 12

C语言实现字符串中(10进制和16进制)转成十进制数

如何将字符串中的10进制数和16进制数提取出来,看以下代码: #include <stdio.h> typedef char TUINT8 ; typedef int TUINT32; TUINT32 Read_DecNumber(const TUINT8* str); TUINT32 Read_HexNumber(const TUINT8* str); int main(void) { int ret = Read_DecNumber("1000"); int d = R