我需要转换十进制值,如
int dec = 129;
转换为像
这样的字节值byte frame2 = (byte) 129;
但正如您可能已经猜到的那样,它会转换为意外值。我希望字节值字面上是129而不是-127(frame2的值)。
你怎么能用Java实现它?我也很感激你的解释。
由于
答案 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中字节的符号扩展:它根本与小数无关。