所以byte转int在java中,是完全按byte值来直接赋给int变量,不存在你说的补0或者补1首先你要明确一点byte类型表示一个字节8位,用来表示一些基本字符,int是长度为32位的整形数。当你在Java中给一个byte类型数据初始化时,你可以用字符,也可以用整数,但是这个整数必须要在-128和127之间(因为byte是8位),它会将这个数转化为一个字符然后存放起来,因此你的前两行代码是没有问题的。第四行就开始有问题了:a,b都是byte型,他们相加会先自动转换为int然后相加,当然相加的结果也是int型的,但是你要将一个int型的数字赋给一个byte型的c显然是要强制转换的,因此Java会报编译错误,第五行是同样的道理。第六行有点特殊了,请注意,64+1编译器会自动当做65来处理,这句和c=65效果是一样的,由于65是在-128,127这个区间之间的,因此赋值当然不会出错啦。c++net中可使用内部指针来实现,但C#未提供内部指针,可使用如下替代方法:
设存在 byte[] bs;则
using SystemIO;
MemoryStream 流 = new MemoryStream(bs); 流Position = 0;
BinaryReader 读 = new BinaryReader(流);
string 数据 = 读ReadString();//假设你把bs中的数据解释为UniCode字符串。
//short 数据 = 读ReadInt16();//假设你把bs中的数据解释为短整数。
//int 数据 = 读ReadInt32();//假设你把bs中的数据解释为32位整数。
java中将4字节的byte数组转成一个int值的工具方法如下: \x0d\/ \x0d\ @param byte[]\x0d\ @return int\x0d\/ \x0d\public static int byteArrayToInt(byte[] b){ \x0d\ byte[] a = new byte[4]; \x0d\ int i = alength - 1,j = blength - 1; \x0d\ for (; i >= 0 ; i--,j--) {//从b的尾部(即int值的低位)开始copy数据 \x0d\ if(j >= 0) \x0d\ a[i] = b[j]; \x0d\ else \x0d\ a[i] = 0;//如果blength不足4,则将高位补0 \x0d\ } \x0d\ int v0 = (a[0] & 0xff) 回答于 2022-11-16
示例
package comsdvdxlother;public class Test {
public static void main(String[] args) {
byte[] bytes = new byte[] {0x00,0x53};
for (byte b : bytes) {
Systemoutprintln(IntegervalueOf(b));
}
}
}
结果:
0
83
PS : 使用的时候会自动转换成10进制的
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)