一次面試題,將 字符串 保存在 Byte 數組中


最近在面試,遇到一個面試題

字符串 String str = "AD428C93DE" 編程實現把 str 的內容放到 Byte[6] b 的數組中,存入后並能恢復原來的字符串。

初始看到該題,有點一愣,感覺用 ascii 編碼也無法保存這字符串啊。
后來才明白一點,要把 ABCDE 字符當做 16 進制中的 ABCDE存儲,剛好都是小於 5位就可以保存的,要是多個 F 就無法保存了。

package com.util;

/**
 * @Author: Robert_mml
 * @Version 1.0 2019/11/6
 */
public class StringUtils {

    public static void main(String[] args) {
        String a = "AD428C93DE";

        byte[] bytes = new byte[6];

        StringBuilder sb = new StringBuilder();

        String[] split = a.split("");
        for (int i = 0; i < split.length; i++) {
            sb.append(split[i]);
            if (i % 2 != 0) {
                int str2HexInt = str2HexInt(sb.toString());
                bytes[i / 2] = (byte) str2HexInt;
                sb.delete(0, 2);
            }
        }

        for(byte b : bytes) {
            if (b > 0) {
                System.out.println(b);
            } else {
                System.out.println(256 + b);
            }
        }

    }

    static final char[] chars = "0123456789ABCDEF".toCharArray();
    public static int str2HexInt(String str){
        char[] chars1 = str.toCharArray();
        int result = 0;
        for (int i = 0; i < chars1.length; i++) {
            for (int j = 0; j < chars.length; j++) {
                if (chars1[i] == chars[j]) {
                    result = (result << 4) | j;    // 相當於 將 原數據 * 16 再加上 新數據, 16進制計算成10進制
                }
            }
        }
        return result;
    }

}

 

通過記錄字符位置,進行保存, 可以將 ABCDEF 字符轉成 16 進制的數字,

然后將兩個字符存在一個 Byte 里, 根本就用不到 6 位數組, 5 位就可以搞定。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM