一次面试题,将 字符串 保存在 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 位就可以搞定。

原文地址:https://www.cnblogs.com/mmling/p/11806057.html

时间: 2024-10-01 05:00:10

一次面试题,将 字符串 保存在 Byte 数组中的相关文章

VB.NET 将JSON格式的字符串保存到XML文件中

1.关于本文 这几天打算写一个工具类JsonXmlHelper,用来进行用XML来保存JSON格式文件的工作.该工具类中要实现2个最主要的函数: 1)将JSON格式的内容写入到地址为address的XML中:WriteJsonToXml 2)把函数1中构造的XML文件恢复成JSON格式文档:RecoverJsonFromXml 函数1的实现将在本文中给出,函数2的实现将在以后发表的博文中给出 2.代码说明 1)添加引用:Newtonsoft.Json.dll 2)导入库 'JSON解析相关函数,

SEL如何保存到NSArray数组中

首先,SEL是不可以保存到array数组中去的. 其次,SEL有两种创建方法: SEL s1 = @selector (test1); // 将test1方法转换为NSString对象 SEL s2 = NSSelectorFromString ( @"test1" ); // 将一个字符串 方法 转换成为SEL对象 NSArray无法保存SEL,但是可以保存NSString. 所以我们利用第二种创建方法,讲SEL的方法名以字符串的方式保存到NSArray数组中即可. 举个栗子: NS

十六进制字符串转化为byte数组

工作上有这样的需求之前找了好多都不行,好不容易有个可以的赶紧留下来. 原址:http://blog.163.com/[email protected]/blog/static/113561841201013525720/ 字符串转换成十六进制字符串方法1: /** * 字符串转换成十六进制字符串 */ public static String str2HexStr(String str) { char[] chars = "0123456789ABCDEF".toCharArray()

前端面试题:高效地随机选取数组中的元素

有前端题目大概是这样的:考虑到性能问题,如何快速从一个巨大的数组中随机获取部分元素. 比如有个数组有100K个元素,从中不重复随机选取10K个元素. 为了演示方便我们将数据简化,先给出方案最后再用大点的数据来测试性能的对比. 常规解法 常规做法倒也不难,生成一个0到数组长度减1的随机数,这个数也就是被选中元素在原数组中的下标,获得该元素后将值保存到另一个数组同时通过数组的splice方法将该元素从原数组中删除,以保证下次不会重复取到. 按以上思路,代码大概就是这样的: //元素总数,为了方便演示

java将已有的字符串保存到txt文件中

python网络爬虫-通过互联网采集 RMQ算法的学习(区间最值问题)NYOJ119士兵杀敌(三) JAVA常用设计模式 Java多线程知识要点 9fw谀泄牡http://p.baidu.com/itopic/main/center?uid=15fe616263346630323931e4ac&qizj夹餐智p7k9e6律犹媒http://p.baidu.com/itopic/main/center?uid=6bfe616263386334303438e5ac&8q90潦卓嚷v5uuq9轮

剑指offer面试题38:数字在排序数组中出现的次数

题目描述: 统计一个数字在排序数组中出现的次数. 输入: 每个测试案例包括两行: 第一行有1个整数n,表示数组的大小.1<=n <= 10^6. 第二行有n个整数,表示数组元素,每个元素均为int. 第三行有1个整数m,表示接下来有m次查询.1<=m<=10^3. 下面有m行,每行有一个整数k,表示要查询的数. 输出: 对应每个测试案例,有m行输出,每行1整数,表示数组中该数字出现的次数. 样例输入: 81 2 3 3 3 3 4 513 样例输出: 4 //source:http

C#将字符串转化为byte数组

原文来自:http://www.newxing.com/Tech/DotNet/CSharp/119.html 1 //String To Byte[]: 2 byte[] byteArray = System.Text.Encoding.Default.GetBytes(str); 3 4 //Byte[] To String: 5 string str = System.Text.Encoding.Default.GetString(byteArray); 更多内容请点击原文

【剑指offer】面试题38:数字在排序数组中出现的次数

题目: 统计一个数字在排序数组中出现的次数. 思路: 对二分查找进行改进,找到数字在数组中第一次出现和最后一次出现的位置,这样就得到它出现的次数. 以找第一次出现的位置为例:如果mid元素大于k,则在前半段找:如果小于k,则在后半段找:如果等于k,则要看mid的前一个元素是不是k,如果是,则在前半段找,如果不是,则这就是第一次出现的位置. 时间复杂度O(logn). 代码: class Solution { public: int GetNumberOfK(vector<int> data ,

剑指offer——面试题38:数字在排序数组中出现的次数(利用二分查找来找第一次和最后一次的位置)

题目: 统计一个数字在排序数组中出现的次数. 思路: 因为是排好序的数组,所以可以采用二分查找的算法. 一般最容易想到的思路是采用二分查找先找到一个,然后往他左右两边遍历,但是这个方法由于在n个数组中还可能有n个k,所以 查找的复杂度还是O(n) 可以先用二分查找算法找到第一个出现的位置,即当找到一个时,看它前面一个是否也是k或者是否已经是查找这段的第一个了 然后同样用二分查找找最后一个出现的位置. 1 #include<iostream> 2 #include<vector> 3