0

所以我通过蓝牙发送一些东西,为此我使用字节数组,我正在使用的字节数组之一我需要在发送之前更改其中一个值,使用这个......

private void sendIntensity(int I){
    intensity[3] = (byte) i;
    sendIntensity();
}

原始字节数组是这样组成的:

private byte[] intensity = new byte[]{58,0,42,0,10,13}

我从编辑文本中获取强度,获取文本并使用正则表达式找到他们想要使用的强度,我使用

int option = Integer.parseInt(text);

要做到这一点。基本上,任何低于 128 的数字都可以正常工作,我可以看到这一点,因为我将值记录在数组中,将其设置为 127 会记录58, 0, 42, 127, 10, 13,但是当我执行 128 或超过 128 时,我会在记录它时得到一组奇怪的数据。

我将放入的最大数量是 255。

当我在使用时记录数组中的内容时,intensity[3] = (byte) 128;我回来了50, 0, 42, -17, -66, -128, 10, 13

当我记录使用 129 时会发生什么时,我会回来50, 0, 42, -17, -66, -127, 10, 13

怎么了?为什么我不能50, 0, 42, 128, 10, 13像我应该的那样回来?

4

2 回答 2

2

那是因为byterange 是[-128, 127],如果您尝试设置一个大于 a 的值127byte它会往返于-128-127依此类推。

来自 SCJP 6 书:

byte a = (byte) 128;

(...) 结果是什么?当您缩小原语时,Java 只是截断不适合的高阶位。换句话说,它会丢失您要缩小到的位左侧的所有位。

更多信息:

于 2012-10-29T07:03:09.653 回答
0

这仅仅是由于 java 中的字节特性从 -128 到 128 仅此而已

于 2012-10-29T07:04:09.950 回答