正确地将十进制值转换为字节值

时间:2013-06-04 06:38:59

标签: java

我需要转换十进制值,如

int dec = 129;

转换为像

这样的字节值
byte frame2 = (byte) 129;

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

你怎么能用Java实现它?我也很感激你的解释。

由于

2 个答案:

答案 0 :(得分:7)

你不可能,而且很可能你不需要。根据定义,一个字节是-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.

答案 1 :(得分:1)

  

我需要转换十进制值,如

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

int dec = 129;

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

  

转换为像

这样的字节值
byte frame2 = (byte) 129;

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

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

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