叉烧店并不卖叉烧

java,将int变量与byte[]相互转换

java TTT 107℃ 0评论

参考 参考2

这是最近接触的一个面试题,其中的知识需要了解到byte类型的字节长度为1,int字节长度为4。所以需要int类型不能直接存到一个byte元素中,所以需要用byte[]来存储,将int的每一个字节存储到byte[]的每一个元素中。

在写int变量与byte[]相互转换的时候,还需要了解一下数字在每一个字节是如何表示的。一般,最高位代表正负号,0为正,1为负。比如byte元素的二进制表示为00000101,那么它换位十进制就是5。如果用二进制表示一个复数,那么最高位为1,比如用int表示一个负数,那么它4个字节,也就是第32位为1,如果用byte表示一个负数,那么它第8位为1,而且,复数是以他的补码来在二进制上表示的,如果你看一个复数的二进制,你还不能直接将二进制转为十进制,你需要先算出它的原码才行。比如一个byte元素为11111010,那它的原码是(不要第8位)0000110为6

原码,反码,补码
原码:0000110
反码:1111001(原码取反)
补码:1111010(反码加一)

其实可以这么说,正数的原码,反码,补码一样。复数就是按照上面的规则。就把它们当作都是用补码的形式存在二进制也行

int变量与byte[]相互转换的函数

int转为byte[]

	public byte[] intToByte(int num) {
                // 四个元素,每个元素存放int元素的每一个字节
		byte[] bArray = new byte[4];
		for (int i = 0; i < bArray.length; i++) {
                        // 用移位的方式来将int元素的每个字节移到第一个字节,然后存到byte元素中,高位会自动切掉
			bArray[i] = (byte) (num >> (i * 8));
		}
		return bArray;
	}

byte[]转为int

	public int byteToInt(byte[] bArray) {
               // 使用累加的方式来将byte[]转为int元素
		int sum = 0;
		for (int i = 0; i < 4; i++) {
                        // 将byte[]的每个元素转为int,并且和0xff做& 运算,目的是当byte为负数时,
                        // 转为int时,高三个字节会全为1,那就会出错,与0xff做与是消掉高位的1
			int num = (int) bArray[i] & 0xff;
			num <<= i * 8;
			sum += num;
		}
		return sum;
	}

转载请注明:叉烧店 » java,将int变量与byte[]相互转换

喜欢 (0)
发表我的评论
取消评论

CAPTCHA Image
Reload Image
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址