[英]Converting int to byte[]
我正在从Android屏幕上读取一个值,并尝试将其转换为byte []以通过蓝牙发送该值,但是每次我从屏幕上获取128时,它将在byte []中将其转换为-128,然后我什么都没得到。.是什么问题。.为什么给负数?
这是转换代码:
ByteBuffer.allocate(4).putInt(yourInt).array();
编辑:另一方面,我必须将byte []转换为String。
另一个问题..如果我降低了allocate()
的数字,即使我仅在数组中使用1个位置,我也会得到BufferOverflowException。 为什么?
编辑2:我正在使用8位数字(0-255)
public static void main(String[] args) {
byte[] num = BigInteger.valueOf(-2147483648).toByteArray();
System.out.println(new BigInteger(num).intValue());
}
如果您只想传输一个字节,值为0-255,则
public static void main(String[] args) {
for(int i=0; i<=255; i++){
byte a = (byte) i;
byte[] num = new byte [] {(byte) a};
System.out.println(num[0] + " : " + i + " : " + ((256+num[0]) % 256));
}
}
第二个代码将一个字节变量转换为相等的整数输出。
代码执行此操作的原因是因为整数(128)看起来像二进制的1000000
,带有一堆前导零。 由于所有Java原语都经过签名,因此前导位为0,这样就可以了。 但是,当转换为字节时,前导位将被解释为符号位,因此最后一个byte
被解释为负数。
文档也很清楚, putInt()
将整数的所有4个字节写入缓冲区,而不是仅将“已使用”的字节写入缓冲区。
您正在ByteBuffer中看到正确的值。 缓冲区的最后一个字节的字节值为0x80,如果您在笨拙的终端中显示该符号,则将其扩展为更长的int值-128。
BYTE VALUES
1000 0000
该高位通常在带符号的字节/短/整数系统中指定一个负数。
如果仅在前面加1位,就将此带符号的字节转换为较大的类型(如int),则会看到以下内容:
1111 1111 1111 1111 1111 1111 1000 0000
表示-128为有符号int。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.