2012-09-21 52 views
0

我已经用Java编写了下面的程序来将长转换为字节。长到字节转换

public class LongtoByte 
    { 
      public static void main(String[] args) 
      { 
       long a=222; 
       byte b=(byte)(a & 0xff); 
       System.out.println("the value of b is" +b); 

      } 
    } 

问题是我得到结果-34为变量b。

请告诉我如何得到正确的值。我只需要以字节为单位的值。

+1

什么是你期望的“正确的价值”? –

+1

这是正确的值。 –

回答

2

Java的类型是有符号,字节允许-128和+ 127.this之间的数字是你得到的-34理由222价值

 long a=121; 
    byte b=(byte)(a); 
    System.out.println("the value of b is" +b); 
+0

你已经花了很长时间a = 121,但我想长a = 222被转换为字节值,以便它可以存储在一个字节数组 – user1673627

0

可以使用java.lang.Long类的byteValue()方法:

byte b = a.byteValue(); 

你将不得不作出一个Long类型的对象,例如:

Long a = new Long(222); 

正如其他人指出的那样,这将返回 - 由于可以由8位的字节表示的范围溢出。

+0

...''''在'长a'' – asgs

+0

是的,我去了原始的海报的变量。 – squiguy

1

所有整数类型(包括byte)在Java中的签名,这样如果你坚持222到Java byte你得到溢出(导致你看到的负数)。如果您需要Java中的整数范围0-255,您至少需要short

但是,如果您只是将某个结果作为单个字节写入,则不必担心,因为其位模式表示与中的unsigned byte完全相同。

-1
public class LongtoByte 
    { 
      public static void main(String[] args) 
      { 
       long a=222; 
       byte b=(byte)(a); 
       System.out.println("the value of b is" +b); 

      } 
    } 

该字节bValue =(字节)NUM;语句转换为字节格式。

0

当你打印一个字节如果打印

byte b = (byte) 222; 

你应该会得到一个负数它假定为127

一系列-128。

如果要存储范围0到255,则需要在获取值时将其转换。

int i = 222; 
byte[] b = { (byte) i }; 
int i2 = b[0] & 0xFF; // give me the original unsigned 0 to 255. 
assert i == i2; 

你可以发明各种编码。例如假设你想存储的数字只有数百万,比如0到2亿或者一个字节的小数-1.00到1.00。您可能会首先认为这是不可能的,因为一个字节只能存储8位数据。

// store millions. 
byte b = (byte) (i/1000000); 
int i = (b & 0xff) * 1000000; 

// store decimal from -1.00 to 1.00 
byte b = (byte) Math.round(d * 100); 
double d = b/100.0; 
+0

但彼得它可以为222。但是,如果我想要转换任何数字这样如12000或120000.它当时不起作用。如何使它工作? – user1673627

+0

您只能在一个字节中存储256个不同的值。如果您事先知道所有可能的值,并且可以使用查找表或公式(如示例中所示)存储任意数字 –

+0

Peter您仍然在字节数组b中存储-34,在下一行中您正在ANDing具有0xFF的b [0]并存储在整型变量中。但我想在字节数组中转换为字节后存储实际的长整型值,并且我不想存储-34。让我告诉你我想要这个字节值,因为我想通过TCP连接传输这个字节数组,并且使用字节数组将会很快。 – user1673627