关于java各种类型转化为无符号和类型转化为byte数组的方法
来源:互联网 发布:php租车系统源码 编辑:程序博客网 时间:2024/06/05 10:39
由于在java中所有的数据类型都是有符号的,但是在工作中与c进行通信是是无符号的,所以造成比如说java中int类型占4个字节,当服务器传过来的四个字节为无符号整型,这时就不能用int来表示了所以就要另想办法,而且需要把java中的类型转化为byte数组
1.java中的无符号short类型转化为byte数组
</pre><p></p><pre>
用于java中无法用有符号的short表示无符号short,所以用int表示无符号的short类型,接着我们开始循环2次取int类型的低8位存在targets数组中,这样就可以取出来要转化的数了
// short整型转为byte类型的数组public static byte[] unsigned_short_2byte(int length) {byte[] targets = new byte[2];for (int i = 0; i < 2; i++) {int offset = (targets.length - 1 - i) * 8;targets[i] = (byte) ((length >>> offset) & 0xff);return array;}}return targets;}
2.无符号整型转化为byte
// 无符号整型转化为字节数组public static byte[] unsigned_int_2byte(long length) {byte[] targets = new byte[4];for (int i = 0; i < 4; i++) {int offset = (targets.length - 1 - i) * 8;targets[i] = (byte) ((length >>> offset) & 0xff);}return targets;}
同上,依次取long类型的低四位,放数组
3、无符号byte类型转为数组
public static byte[] unsigned_char_2byte (char res) {byte[] bytelen = new byte[1];bytelen[0] = (byte) res;return bytelen;}
同上,这里我用char类型表示无符号的byte类型,当然也可以用其他的,这里取出低8位
4判断byte类型的某一位是否为
public static byte[] getBooleanArray(byte b) {byte[] array = new byte[8];for (int i = 7; i >= 0; i--) {array[i] = (byte) (b & 1);b = (byte) (b >> 1);}return array;}
这里传进一个byte类型的数,然后循环判断&1是否等于1,存入数组,然后将byte数组向右移1位,再次循环,最后返回的数组就是byte中8位的bit位
5、将long类型转化为byte数组
public static byte[] long_2byte(long length) {byte[] targets = new byte[8];for (int i = 0; i<8 4; i++) {int offset = (targets.length - 1 - i) * 8;targets[i] = (byte) ((length >>> offset) & 0xff);}return targets;}
同1,循环8次
6、读取byte数组中2无符号short位转为int
// 读取2个字节转为无符号整型public static int shortbyte2int(byte[] res) {DataInputStream dataInputStream = new DataInputStream(new ByteArrayInputStream(res));int a = 0;try {a = dataInputStream.readUnsignedShort();} catch (IOException e) {e.printStackTrace();}return a;}
这里直接就可以读取两个字节的数转化为int类型,很方便
7、读取一个无符号字节转为int
public static int byte2char(byte[] res) {DataInputStream dataInputStream = new DataInputStream(new ByteArrayInputStream(res));int a = 0;try {a = dataInputStream.readUnsignedByte();} catch (IOException e) {e.printStackTrace();}return a;}
这里读取的无符号byte类型转为int类型
8.读取四个字节转为long类型
public static long unintbyte2long(byte[] res) {int firstByte = 0;int secondByte = 0;int thirdByte = 0;int fourthByte = 0;int index = 0;firstByte = (0x000000FF & ((int) res[index]));secondByte = (0x000000FF & ((int) res[index + 1]));thirdByte = (0x000000FF & ((int) res[index + 2]));fourthByte = (0x000000FF & ((int) res[index + 3]));index = index + 4;return ((long) (firstByte << 24 | secondByte << 16 | thirdByte << 8 | fourthByte)) & 0xFFFFFFFFL;}
用于读取的是四个字节表示的是无符号的,所以用int类型无法正确表示它的值,用long类型来表示无符号int的数值这里依次取出byte数组的0,1,2,3位,与0xFF与位,然后依次第一位向右移24位,16,8,再取或,再取与,强制转换long
0 0
- 关于java各种类型转化为无符号和类型转化为byte数组的方法
- Java byte数组按位转化为long类型
- java中类型int转化为Byte
- 各种类型转化为String
- java中把对象转化为byte数组的方法
- Java Calendar转化为Date类型方法
- 关于数字类型转化为整型的方法
- java byte类型转化为int (注意加&0xff)
- java中int值转化为byte的符号问题
- StringBuffer转化为String类型,和数组类型?
- JAVA的数组 && 原始类型和引用类型以及String与int long相互转化 && String与byte[]相互转化
- java 把 byte[] 数组转化为String
- java中InputStream转化为byte[]数组
- Java 中String转化为byte数组
- java中InputStream转化为byte[]数组
- java中InputStream转化为byte[]数组
- java中InputStream转化为byte[]数组
- java中InputStream转化为byte[]数组
- xUtils更新到3.0后的基本使用规则
- leetcode:Gas Station 【Java】
- iOS中.PCH文件的配置及使用
- constructor
- Java数据结构笔记1——Java集合框架
- 关于java各种类型转化为无符号和类型转化为byte数组的方法
- lua-循环
- 个人错误代码集锦(Python语言)
- 文章标题
- shell简介
- 从开发者角度解析 Android N 新特性!
- JVM梳理
- Codeforces--598A--Tricky Sum(数学)
- 送给前线码农的话 - 大牛们的经典语录