二进制和十六进制转换
最编程
2024-05-22 17:54:18
...
二进制转十六进制
第一种方法是先把二进制转换为十进制,然后十进制再转换为十六进制。十进制转换为二进制或十六进制的方法差不多,给定十进制数m=Hn * 16^n+Hn-1 * 16^(n-1) +……+H1 * 16^1+H0 * 16^0.那么H0=m%16;
m/16 = Hn * 16^(n-1)+Hn-1 * 16^(n-2) +……+H1,H1=m/16%16;
m/(16^k)= Hn * 16^(n-k)+Hn-1-k * 16^(n-2-k) +……+Hk,Hk=m/(16^k)%16;代码实现
public static String binaryToHex(String binaryString)
{
StringBuilder re = new StringBuilder();
//先转十进制
int num = Integer.parseInt(binaryString);
do
{
int t = num%16;
num/=16;
if(t<10)
re.insert(0,(char)(t+'0'));//0-9,(char)(1+'0')='1'
else
re.insert(0,(char)(t-10 +'A'));//A->10,B->11,C->12,D->13,E->14,F->15
}while(num!=0);
return re.toString();
}
还有一种方法,二进制每四位对应一个十六进制位的数,如0001对应1,1010对应A,可以每次提取四位,然后转换,如果给定的二进制字符串不是4的倍数,可以在字符串前补足0,达到位数是4的倍数。代码如下:
public static String binaryToHex(String binaryString)
{
String result= "";
String temp = "";
int length = binaryString.length();
int i = length%4;
//补足0,达到位数是4的倍数
if(i>0)
{
for(int j=0;j<4-i;j++)
binaryString = "0"+binaryString;
}
for(int index=0;index<=binaryString.length()-4;index+=4)
{
temp = binaryString.substring(index, index+4);//每次取出一个字符串,个数为4,
result+=binaryToHexChar(temp);
}
return result;
}
四个二进制位数转化为十进制位(一位),代码如下:
public static char binaryToHexChar(String temp)
{
char c=' ';
String[] binary= {
"0000","0001","0010","0011",
"0100","0101","0110","0111",
"1000","1001","1010","1011",
"1100","1101","1110","1111"
};
char[] chs = {
'0','1','2','3',
'4','5','6','7',
'8','9','A','B',
'C','D','E','F'};
for(int i=0;i<binary.length;i++)
{
if(temp.equalsIgnoreCase(binary[i]))
{
c = chs[i];
break;
}
}
return c;
}
测试代码:
public static void main(String[] args)
{
Random ran = new Random();
String[] str = new String[5];
for(int i=0;i<str.length;i++)
{
str[i] = Integer.toBinaryString(ran.nextInt(Integer.MAX_VALUE));
}
for(int i=0;i<str.length;i++)
{
System.out.println("-----------------");
System.out.println(Integer.toHexString(Integer.parseInt(str[i],2)));
;
System.out.println(binaryToHex(str[i]));
System.out.println(binaryToHex1(str[i]));
System.out.println("-----------------");
}
}
测试结果:
-----------------
26ccc4ca
26CCC4CA
26CCC4CA
-----------------
-----------------
4ba2113c
4BA2113C
4BA2113C
-----------------
-----------------
29b9434a
29B9434A
29B9434A
-----------------
-----------------
43a7d9e2
43A7D9E2
43A7D9E2
-----------------
-----------------
276ada8f
276ADA8F
276ADA8F
十六进制转二进制(十六进制和二进制都是字符串表示)
对每一个十六进制位数转化为一个四位的二进制字符串
代码如下:
public static String HexToBinary(String str)
{
StringBuilder str1 = new StringBuilder();
for(int i=0;i<str.length();i++)
str1.append(hexCharToBinary(str.charAt(i)));
int i=0;
//把开始的0去掉,如果都是0,只返回“0”
while(i<str1.length())
{
if(str1.charAt(i)!='0')
break;
i++;
}
if(i==str1.length())
return "0";
return str1.substring(i);
}
每一位的转换代码:
public static String hexCharToBinary(char ch)
{
String str = "";
switch(ch)
{
case '0':
str = "0000";
break;
case '1':
str = "0001";
break;
case '2':
str = "0010";
break;
case '3':
str = "0011";
break;
case '4':
str = "0100";
break;
case '5':
str = "0101";
break;
case '6':
str = "0110";
break;
case '7':
str = "0111";
break;
case '8':
str = "1000";
break;
case '9':
str = "1001";
break;
case 'a':
str = "1010";
break;
case 'b':
str = "1011";
break;
case 'c':
str = "1100";
break;
case 'd':
str = "1101";
break;
case 'e':
str = "1110";
break;
case 'f':
str = "1111";
break;
}
return str;
}
测试代码:
public static void main(String[] args)
{
Random ran = new Random();
String[] str = new String[5];
for(int i=0;i<str.length;i++)
{
str[i] = Integer.toHexString(ran.nextInt(Integer.MAX_VALUE));
}
for(int i=0;i<str.length;i++)
{
System.out.println("-----------------");
System.out.println(str[i]);
System.out.println(Integer.toBinaryString(Integer.parseInt(str[i],16)));
; System.out.println(HexToBinary(str[i]));
System.out.println("-----------------");
}
}
结果如下:
-----------------
56b0e081
1010110101100001110000010000001
1010110101100001110000010000001
-----------------
-----------------
3a58b0a4
111010010110001011000010100100
111010010110001011000010100100
-----------------
-----------------
65593dcb
1100101010110010011110111001011
1100101010110010011110111001011
-----------------
-----------------
4a7356a8
1001010011100110101011010101000
1001010011100110101011010101000
-----------------
-----------------
788f0ee1
1111000100011110000111011100001
1111000100011110000111011100001
-----------------
这里只是完成的主要代码,主要是思路,还有参数的合法性没有检测,还有一些特殊情况没有处理,主要是解决问题的思路,供大家参考。
由于水平有限,如果有错误,请大家多多批评指导,提高水平,共同学习。
推荐阅读
-
基于 ZABBIX 的监控 RabbitMQ 服务开箱即用模板的中文和适用性转换
-
XML XSLT:转换和呈现数据的力量
-
重新学习 MySQL] 59:二进制字符串类型和 JSON 类型59:二进制字符串类型和 JSON 类型
-
使用 JLINK 合并启动和应用程序十六进制文件,然后使用 Keil 刻录到微控制器中。
-
Matlab 编程示例 24:freexyn 在 b-site 中读取手写 mnist 数据集的 Matlab 代码 -4. 读取和转换 mnist 数据集的 Matlab 程序代码
-
在 js 中转换各种时间和日期格式
-
深度学习:cGAN 和 pix2pix 图像转换
-
十进制和 ip 地址转换公式(EXCEL 公式)
-
互相转换的BGRA、RGBA和YUV420
-
转换YUV420、YUV422和RGB24的方法