二进制、十进制、十六进制、字符串之间的相互转换

1. 字节转10进制

直接使用(int)类型转换。

    /*
     * 字节转10进制
     */
    public static int byte2Int(byte b){
        int r = (int) b;
        return r;
    }

2. 10进制转字节

直接使用(byte)类型转换。

    /*
     * 10进制转字节
     */
    public static byte int2Byte(int i){
        byte r = (byte) i;
        return r;
    }

3. 字节数组转16进制字符串

对每一个字节,先和0xFF做与运算,然后使用Integer.toHexString()函数,如果结果只有1位,需要在前面加0。

    /*
     * 字节数组转16进制字符串
     */
    public static String bytes2HexString(byte[] b) {
        String r = "";

        for (int i = 0; i < b.length; i++) {
            String hex = Integer.toHexString(b[i] & 0xFF);
            if (hex.length() == 1) {
                hex = ‘0‘ + hex;
            }
            r += hex.toUpperCase();
        }

        return r;
    }

4. 16进制字符串转字节数组

这个比较复杂,每一个16进制字符是4bit,一个字节是8bit,所以两个16进制字符转换成1个字节,对于第1个字符,转换成byte以后左移4位,然后和第2个字符的byte做或运算,这样就把两个字符转换为1个字节。

    /*
     * 字符转换为字节
     */
    private static byte charToByte(char c) {
        return (byte) "0123456789ABCDEF".indexOf(c);
     }

    /*
     * 16进制字符串转字节数组
     */
    public static byte[] hexString2Bytes(String hex) {

            if ((hex == null) || (hex.equals(""))){
                return null;
            }
            else if (hex.length()%2 != 0){
                return null;
            }
            else{
                hex = hex.toUpperCase();
                int len = hex.length()/2;
                byte[] b = new byte[len];
                char[] hc = hex.toCharArray();
                for (int i=0; i<len; i++){
                    int p=2*i;
                    b[i] = (byte) (charToByte(hc[p]) << 4 | charToByte(hc[p+1]));
                }
              return b;
            }           

    }

5. 字节数组转字符串

直接使用new String()。

    /*
     * 字节数组转字符串
     */
    public static String bytes2String(byte[] b) throws Exception {
        String r = new String (b,"UTF-8");
        return r;
    }

6. 字符串转字节数组

直接使用getBytes()。

    /*
     * 字符串转字节数组
     */
    public static byte[] string2Bytes(String s){
        byte[] r = s.getBytes();
        return r;
    }

7. 16进制字符串转字符串

先转换成byte[],再转换成字符串。

    /*
     * 16进制字符串转字符串
     */
    public static String hex2String(String hex) throws Exception{
        String r = bytes2String(hexString2Bytes(hex));
        return r;
    }

8. 字符串转16进制字符串

先转换为byte[],再转换为16进制字符串。

    /*
     * 字符串转16进制字符串
     */
    public static String string2HexString(String s) throws Exception{
        String r = bytes2HexString(string2Bytes(s));
        return r;
    }

main函数:

    public static void main(String[] args) throws Exception{
        byte b1 = (byte) 45;
        System.out.println("1.字节转10进制:" + byte2Int(b1));

        int i = 89;
        System.out.println("2.10进制转字节:" + int2Byte(i));

        byte[] b2 = new byte[]{(byte)0xFF, (byte)0x5F, (byte)0x6, (byte)0x5A};
        System.out.println("3.字节数组转16进制字符串:" + bytes2HexString(b2));

        String s1 = new String("1DA47C");
        System.out.println("4.16进制字符串转字节数组:" + Arrays.toString(hexString2Bytes(s1)));

        System.out.println("5.字节数组转字符串:" + bytes2String(b2));

        System.out.println("6.字符串转字节数组:" + Arrays.toString(string2Bytes(s1)));

        System.out.println("7.16进制字符串转字符串:" + hex2String(s1));

        String s2 = new String("Hello!");
        System.out.println("8.字符串转16进制字符串:" + string2HexString(s2));
    }

运行结果:

1.字节转10进制:45
2.10进制转字节:89
3.字节数组转16进制字符串:FF5F065A
4.16进制字符串转字节数组:[29, -92, 124]
5.字节数组转字符串:?_Z
6.字符串转字节数组:[49, 68, 65, 52, 55, 67]
7.16进制字符串转字符串:?|
8.字符串转16进制字符串:48656C6C6F21
时间: 2024-09-29 03:04:07

二进制、十进制、十六进制、字符串之间的相互转换的相关文章

Java学习篇之---byte与十六进制字符串之间互转

byte与十六进制字符串之间互转 byte,字节类型,占用8bit空间,可用8位2进制数表示:十六进制,每位占有4bit空间,可用4位2进制数表示. 我们可以把每个byte类型转换成两个相应的16进制字符,即把byte的高4位和低4位分别转换成相应的16进制字符H和L,并组合起来得到byte转换到16进制字符串的结果. 即byte用十六进制表示只占2位. 同理,相反的转换也是将两个16进制字符转换成一个byte. 根据以上原理,我们就可以将byte[] 数组转换为16进制字符串了,当然也可以将1

JS中实现JSON对象和JSON字符串之间的相互转换

对于主流的浏览器(比如:firefox,chrome,opera,safari,ie8+),浏览器自己提供了JSON对象,其中的parse和stringify方法实现了JSON对象和JSON字符串之间的相互转换,例如: // JSON对象转JSON字符串,输出:"{\"name\":\"zhangsan\",\"age\":10,\"birthday\":\"2017-08-15T07:09:48.724Z

ASCII码表(二进制 十进制 十六进制)

css里,允许使用转义字符\+ascii16进制形式; 例如: e的ascii 16进制是65,我们就写为\65 expression -> expr\65ssion 二进制 十进制 十六进制 缩写 解释 0000 0000  0 00 NUL 空字符(Null) 0000 0001 1 01 SOH 标题开始 0000 0010 2 02 STX 正文开始 0000 0011 3 03 ETX 正文结束 0000 0100 4 04 EOT 传输结束 0000 0101 5 05 ENQ 请求

JSON对象与字符串之间的相互转换 - CSDN博客

原文:JSON对象与字符串之间的相互转换 - CSDN博客 [html] view plain copy print? <html> <head> <meta name="viewport" content="width=device-width" /> <title>JSON对象与字符串之间的相互转换</title> <script src="~/Js/jquery-1.8.0.js&qu

C# 二进制与字符串之间的相互转换

/// <summary> /// 将字符串转成二进制 /// </summary> /// <param name="s"></param> /// <returns></returns> public static string bianma(string s) { byte[] data = Encoding.Unicode.GetBytes(s); StringBuilder result = new St

PHP二进制与字符串之间的相互转换

<?php header("Content-type: text/html; charset=utf-8");      /** * 将字符串转换成二进制 * @param type $str * @return type */ function StrToBin($str){     //1.列出每个字符     $arr = preg_split('/(?<!^)(?!$)/u', $str);     //2.unpack字符     foreach($arr as 

C# 二进制 十进制 十六进制 之间的转换

int a = 10; Console.WriteLine(a.ToString("X")); //10进制转16进制 Console.WriteLine(Convert.ToString(a, 16)); //10进制转16进制 Console.WriteLine(Convert.ToString(a, 2)); //10进制转2进制 string b = "1010"; Console.WriteLine(Convert.ToInt32(b, 2)); //2进

[javaSE] 进制转换(二进制十进制十六进制八进制)

十进制转二进制,除2运算 十进制6转二进制是 110  (注意从右往左写,使用算式从下往上写) 二进制转十进制,乘2过程 二进制110转十进制  0*2的0次方+1*2的1次方+1*2的2次方=6 对应关系 0 1 0 1 0 1 32 16 8 4 2 1 把1对应的位置的数加起来就可以了,所以是21 一个字节 1 1 1 1 1 1 1 1 最大值是255 加法运算5 + 4=9,转成二进制进行运算 1 0 1 +1 0 0 1 0 0 1 其他进制转换 八进制可以看作是三个二进制位代表一位

二进制数据和字符串之间转换

1.把二进制数据编码为base64格式 你有一个byte[]用于表示一些二进制信息,比如图像,你需要把这些数据编码为一个字符串,以便可以通过不适合二进制的方式(比如电子邮件)发送它. 可以使用Convert类的静态方法Convert.ToBase64String,把byte[]编码为string public static string Base64EncodeBytes(this byte[] inputBytes) { return Convert.ToBase64String(inputB