java 无符号byte转换

java中的byte类型是有符号的,值得范围是-128-127

做网络通讯时,接收过来的数据往往都是无符号的byte,值得范围是0-255

因此直接转换时,存储到java显示的值就会有问题

int ori=200;
System.out.println("原始byte值:"+ori);
Byte b=(byte)ori;
System.out.println("java中byte值:"+b);
Integer i=b.intValue();
System.out.println("转换后的int值:"+i);
System.out.println("存储的2进制值:"+Integer.toBinaryString(i));
Integer i_trans=i&0xFF;
System.out.println("&0xFF后的:"+i_trans);

输出如下:

原始byte值:200
java中byte值:-56
转换后的int值:-56
存储的2进制值:11111111111111111111111111001000
200

例如接收到一个无符号的byte,值200,转到java中的byte,转换后就是-56,因此显示就不正确,需要将服务号的转成有符号的

计算方法就是与0xFF做一个&运算,也就是与11111111做一个&计算即可

时间: 2024-10-05 05:53:49

java 无符号byte转换的相关文章

java无符号移位(>>>)和有符号移位(>>)

java中>>(<<)表示有符号的移位.<<<(>>>)表示无符号移位 如: int num = 22; 二进制是0001 0110, num>>>1,右移一位变成0000 1011(11) int num = -22 二进制用补码表示:1110 1001, num >>>1无符号右移一位: 0111 0100 >>向右移动后,最左边用符号位替补.>>>向右移动后最左边用0替补 1

java byte转无符号int

import java.io.ByteArrayInputStream; public class Test{ public static void main(String[] args) { byte[] bytes = new byte[]{(byte)-42}; ByteArrayInputStream in = new ByteArrayInputStream(bytes); int result = in.read(); System.out.println("无符号数: \t&quo

java中无符号类型的处理

在Java中,不存在Unsigned无符号数据类型,但可以轻而易举的完成Unsigned转换. 方案一:如果在Java中进行流(Stream)数据处理,可以用DataInputStream类对Stream中的数据以Unsigned读取. Java在这方面提供了支持,可以用java.io.DataInputStream类对象来完成对流内数据的Unsigned读取,该类提供了如下方法:(1)int   readUnsignedByte()    //从流中读取一个0~255(0xFF)的单字节数据,

java中无符号类型的处理[转]

在Java中,不存在Unsigned无符号数据类型,但可以轻而易举的完成Unsigned转换. 方案一:如果在Java中进行流(Stream)数据处理,可以用DataInputStream类对Stream中的数据以Unsigned读取. Java在这方面提供了支持,可以用java.io.DataInputStream类对象来完成对流内数据的Unsigned读取,该类提供了如下方法: (1)int  readUnsignedByte()    //从流中读取一个0~255(0xFF)的单字节数据,

java移位运算符:&lt;&lt;(左移)、&gt;&gt;(带符号右移)和&gt;&gt;&gt;(无符号右移)。

1. 左移运算符 左移运算符<<使指定值的所有位都左移规定的次数. 1)它的通用格式如下所示: value << num num 指定要移位值value 移动的位数. 左移的规则只记住一点:丢弃最高位,0补最低位 如果移动的位数超过了该类型的最大位数,那么编译器会对移动的位数取模.如对int型移动33位,实际上只移动了332=1位. 2)运算规则 按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零. 当左移的运算数是int 类型时,每移动1位它的第31位就

Java 接收 C/C++ 无符号int数值的方法

由于C/C++ 无符号整型int四字节大小,而JAVA只有有符号int,所以JAVA中的int不可以直接接收C/C++无符号整型int,需要用long来接收.但是用long来接收的话字符序列需要转换,高低位互换,可以用JDK里面Integer的reverseBytes()方法来进行互换: Integer.reverseBytes((int)ReceiveNum)&0xFFFFFFFFL; Java 接收 C/C++ 无符号int数值的方法,布布扣,bubuko.com

[Java] java byte数组与int,long,short,byte转换

public class DataTypeChangeHelper { /** * 将一个单字节的byte转换成32位的int * * @param b *            byte * @return convert result */ public static int unsignedByteToInt(byte b) { return (int) b & 0xFF; } /** * 将一个单字节的Byte转换成十六进制的数 * * @param b *            byt

unsigned无符号、有符号类型的转换

先看一段代码 #include <stdio.h> main(){ unsigned char a = -1; char b = a; printf("%d %d",a,b); return 0; } a输出为255,b输出为-1.原因在于无符号类型和有符号类型像高精度转化时候不一样. char类型长度是1个字节8位,而数字在计算机中是以补码形式存储的. 所以a=-1在计算机内对应的值是0xFF.把a赋给b,b的值也是0xFF. 输出时候,printf会把a.b转化为int

【C语言面试题】第1题:有符号变量和无符号变量的值得转换

#include <stdio.h> char getChar(int x,int y) {         char c;         unsigned int a = x;         (a + y > 10) ? (c = 1) : (c = 2);         return c; } int main(void) {         char c1 = getChar(7,4);         char c2 = getChar(7,3);         char