最近在面试,遇到一个面试题

字符串 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 位就可以搞定。

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

  1. 信1705-2 软工作业最大重复词查询思路: (1)将文章(一个字符串存储)按空格进行拆分(split)后,存储到一个字符串(单词)数组中。 (2)定义一个Map,key是字符串类型,保存单词;value是数字类型,保存该单词出现的次数。 (3)遍历(1)中得到的字符串数组,对于每一个单词,考察Map的key中是否出现过该单词,如果没出现过,map中增加一个元素,key为该单词,value为1(

    通过学习学会了文本的访问,了解一点哈希表用途.经过网上查找做成了下面查询文章重复词的JAVA程序. 1 思 思路: (1)将文章(一个字符串存储)按空格进行拆分(split)后,存储到一个字符串(单词 ...

  2. PHP 中替换若干字符串字串为数组中的值,不用循环,非常高效

    替换某个字符串中的一个或若干个字串为数组中某些值 php本身有自带的函数,可以不用循环非常高效的实现其效果: 实例代码:   $phrase  = "You should eat fruit ...

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

    工作上有这样的需求之前找了好多都不行,好不容易有个可以的赶紧留下来. 原址:http://blog.163.com/roadwalker@126/blog/static/113561841201013 ...

  4. delphi十六进制字符串hex转byte数组互相转换bmp图片

    procedure Hex2Png(str: string; out png: TPngObject); var stream: TMemoryStream; begin if not Assigne ...

  5. 剑指Offer面试题:32.数字在排序数组中出现的次数

    一.题目:数字在排序数组中出现的次数 题目:统计一个数字在排序数组中出现的次数.例如输入排序数组{1,2,3,3,3,3,4,5}和数字3,由于3在这个数组中出现了4次,因此输出4. 二.解题思路 2 ...

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

    思路: 利用二分查找,分别查找待统计数字的头和尾的下标,最后做差加一即为结果. C++: #include <iostream> #include <vector> using ...

  7. JS 判断一个字符串是否包含在一个数组中

    var arr = ["白色", "黑色", "红色", "粉色"]; var sel = "黑色" ...

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

    题目: 统计一个数字在排序数组中出现的次数. 思路: 对二分查找进行改进,找到数字在数组中第一次出现和最后一次出现的位置,这样就得到它出现的次数. 以找第一次出现的位置为例:如果mid元素大于k,则在 ...

  9. JS 判断某个字符串是否存在与数组中

    <script> function in_array(stringToSearch, arrayToSearch) { for (s = 0; s < arrayToSearch.l ...

随机推荐

  1. LeetCode54 Spiral Matrix

    题目: Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spira ...

  2. [***]HZOJ 优美序列

    又是一道神仙题.考试的时候居然打了一个回滚莫队,不知道我咋想的…… 先说一个某OJT80,洛谷T5分的思路(差距有点大): 可以把位置和编号映射一下,区间内最大值和最小值对应的位置,每次更新,直到找到 ...

  3. 模板—点分治B(合并子树)(洛谷P4149 [IOI2011]Race)

    洛谷P4149 [IOI2011]Race 点分治作用(目前只知道这个): 求一棵树上满足条件的节点二元组(u,v)个数,比较典型的是求dis(u,v)(dis表示距离)满足条件的(u,v)个数. 算 ...

  4. sublime简介

    Sublime Text是一个代码编辑器.也是HTML和散文先进的文本编辑器.漂亮的用户界面和非凡的功能,例如:多选择,Python插件,代码段等等.完全可自定义键绑定,菜单和工具栏等等.漂亮的用户界 ...

  5. linux下oracle查询中文乱码

    export NLS_LANG=AMERICAN_AMERICA.UTF8

  6. 浮动,定位,flex布局

    什么是文档流 英文原文是:Normal flow. In CSS 2.1, normal flow includes block formatting of block-level boxes, in ...

  7. centos 磁盘挂载

    1.更改磁盘格式 fdisk -l fdisk /dev/vdb mkfs.xfs /dev/vdb1 mkfs.xfs /dev/vdb1 -f 2.查看UUID blkid 3.挂载文件夹 vim ...

  8. 通过git从码云克隆项目到本地

    1.下载安装Git,傻瓜式下一步下一步即可... 2.配置Git: 2.1.选择你要clone到本地的路径:右键--->$ Git Bash Here,弹出Linux命令窗口:$ cd ~直接回 ...

  9. JavaScript的一些SAO操作

    IE判断检测 jQuery 在 1.9 版本之前,提供了一个浏览器对象检测的属性 使用率极高.但是在版本发布之后,大家钟爱的这个属性被无情的抛弃了.大家开始着手寻找.browser 的替代方案.于是各 ...

  10. hdu 1556 Color the ball(区间更新,单点求值)

    Color the ball Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...