java中字节与位的转换
java中byte与bit之间的转换
使用场景:用于解析自定义协议,比如某一位代表一个状态
public class ByteUtils {/*** 获取一个字节的bit数组** @param value* @return*/public static byte[] getByteArray(byte value) {byte[] byteArr = new byte[8]; //一个字节八位for (int i = 7; i > 0; i--) {byteArr[i] = (byte) (value & 1); //获取最低位value = (byte) (value >> 1); //每次右移一位}return byteArr;}/*** 把byte转为字符串的bit** @param b* @return*/public static String byteToBitString(byte b) {return ""+ (byte) ((b >> 7) & 0x1) + (byte) ((b >> 6) & 0x1)+ (byte) ((b >> 5) & 0x1) + (byte) ((b >> 4) & 0x1)+ (byte) ((b >> 3) & 0x1) + (byte) ((b >> 2) & 0x1)+ (byte) ((b >> 1) & 0x1) + (byte) ((b >> 0) & 0x1);}/*** 获取一个字节第n位,* 思路:右移n位,与1** @param value* @param index* @return*/public static int get(byte value, int index) {return (value >> index) & 0x1;}/*** 获取一个字节的第m到第n位** @param value* @param start >0* @param end >0* @return*/public static byte[] getBitRange(byte value, int start, int end) {byte[] rangeArray = new byte[end - start + 1];if (start > 7 || start < 0) {throw new RuntimeException("illegal start param");}if (end > 7 || end < 0) {throw new RuntimeException("illegal end param");}if (start > end) {throw new RuntimeException("start can not bigger than end");}if (start == end) {rangeArray[0] = (byte) ByteUtils.get(value, start);return rangeArray;}for (int i = end; i < start; i--) {rangeArray[i] = (byte) ByteUtils.get(value, start);}return rangeArray;}/*** 位字符串转字节* @param str* @return*/public static byte bitStringToByte(String str) {if(null == str){throw new RuntimeException("when bit string convert to byte, Object can not be null!");}if (8 != str.length()){throw new RuntimeException("bit string'length must be 8");}try{//判断最高位,决定正负if(str.charAt(0) == '0'){return (byte) Integer.parseInt(str,2);}else if(str.charAt(0) == '1'){return (byte) (Integer.parseInt(str,2) - 256);}}catch (NumberFormatException e){throw new RuntimeException("bit string convert to byte failed, byte String must only include 0 and 1!");}return 0;}
java中字节与位的转换相关推荐
- Java中字节数组和十六进制字符串之间的转换
1. 概述 在本教程中,我们将看看将字节数组转换为十六进制字符串,反之亦然的不同方法. 我们还将了解转换机制并编写我们的实现来实现这一点. 2. 字节和十六进制之间的转换 首先,我们来看看字节和十六进 ...
- Java中字节Byte和位Bit的关系
Java中字节容量关系 1TB=1024GB TB是千千兆 1GB=1024MB GB是千兆 1MB=1024KB MB是兆 1KB=1024Byte KB是千字节 注意:Byte的缩写是B也就是字节 ...
- java中的进制输出转换_java中进制的转换,Byte与16进制的转换
java中对于进制的转换有很多方式,其中对于常见的基本的二进制 八进制 十进制 十六进制等的转换有对于的包装类实现,不需要通过二外的算法来进行实现,具体如下: 首先关于最简单的二进制转换的方法有: 十 ...
- Java中long和int互相转换,不改变原有数据
Java中long和int互相转换,不改变原有数据 文章目录 Java中long和int互相转换,不改变原有数据 测试方法,及封装好的方法 封装好之后的方法 测试方法,及封装好的方法 @Test pu ...
- java 千位分隔符_如何在Java中设置千位分隔符?
问题 如何在Java中设置千位分隔符?我有BigDecimal的String表示,我想设置千位分隔符并返回String. #1 热门回答(180 赞) 你可以使用格式功能","; ...
- 7.Java中变量的隐式转换以及强类型转换
1.变量的相加,(变量的数据类型一致),直接运算即可! 结论: Java中变量的 隐式转换(数据类型的默认类型提升) byte,short,char- ...
- Java的编程基础-----Java中二进制与十进制的转换
Java的编程基础-----Java中二进制与十进制的转换 文章目录
- Java中实现图片格式的转换
小小的代码片段,在Java中实现图片格式的转换. 下边的示例中,使用了jpg->jpg,^_^我懒得修改了再测试了,我在实际使用的时候是从bitmap位图转换为了jpg. package com ...
- java中常用的位运算符及其应用
1.位运算就是直接对整数在内存中的二进制位进行操作,针对与int类型进行操作 Java中常用的位运算符有以下7种: & | ^ ~ << ...
最新文章
- 倒计时7天!博客之星虚位以待,Macbook等你来拿
- 好程序员分享做HTML5页面你要懂得这些
- PHP从远程mysql下载文件_PHP下载远程文件到指定目录
- (23/24) webpack实战技巧:如何在webpack环境中使用Json
- 使用 Directory.Build 来消除项目文件中的重复配置
- 算法(26)-最长系列
- linux图形界面为英文,Linux下“英文控制台 中文图形界面”的实现
- macOS Big Sur应用图标替换教程︳big sur图标包
- 【bzoj1222】[HNOI2001]产品加工 背包dp
- android课程设计时钟,单片机制作的电子钟(含闹钟功能)课程设计报告
- 热感传导不能证明经络的存在
- 用FSL进行VBM统计分析
- 基于pytorch训练的VGG16神经网络模型完成手写数字的分割与识别
- shader02-仿星空粒子
- 初识 Mac机子 关机命令
- SQlite3基本用法,使用sublime编辑器
- 阿里巴巴年报来了,一天收入6.85亿
- Pulp Fiction (低俗小说)
- 17.2.20 Sparsifying Neural Network Connections for Face Recognition 小感
- 安卓Android源码——ipcamera-for-android
热门文章
- python-使用python实现发普通邮件和带附件的邮件
- mac vim 添加颜色
- 国内银行接连爆出数据泄露事件,金融行业如何在源头处建立防线
- 无穷级数(一)常数项级数的概念与性质
- PMP备考建议这些点一定要记住
- Handler机制原理解析(一)
- 2022天翼数字科技生态大会 五大亮点看永不落幕的“5G物联生态城”
- 关于音频AEC\AGC\BSS\BF\DOA\NS\DER算法名词解释
- VMware 中的 ubuntu 22.04 无法识别SD卡问题的解决
- iOS关闭自动锁屏和距离感应