1

我需要像这样转换十进制值

int dec = 129;

成一个字节值,如

byte frame2 = (byte) 129;

但正如您可能已经猜到的那样,它会转换为一个意想不到的值。我希望字节值实际上是 129 而不是 -127(frame2 的值)。

你怎么能在Java中实现它?我也将不胜感激。

谢谢

4

2 回答 2

8

你不能也很可能不需要。根据定义,一个字节是 -128 到 127。但是,如果需要编码,您可以在一个字节中存储任何 256 个不同的值。

byte b = (byte) 129;
int i = b & 0xff; // == 129

或者

byte b = (byte) (129 + Byte.MIN_VALUE);
int i = b - Byte.MIN_VALUE; // also 129.
于 2013-06-04T06:40:43.270 回答
1

我需要像这样转换十进制值

停在那儿。没有“十进制值”这样的东西。有一些值,它们以 2s 补码形式保存,并且有十进制表示。

int dec = 129;

这将存储为 129(10) 或 81(16)。

成一个字节值,如

byte frame2 = (byte) 129;

其结果将是-127,因为字节是用 Java 签名的,并且您的值设置了符号位。

如果您想像使用它一样使用该值129,请使用(frame2 & 0xff).但是很可能您根本不需要这样做。

您的问题实际上是关于 Java 中字节的符号扩展:它根本与小数无关。

于 2013-06-04T06:56:45.213 回答