长到字节转换

时间:2012-09-21 05:13:11

标签: java

我用Java编写了以下程序,将long转换为byte。

    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);

            }
    }

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

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

5 个答案:

答案 0 :(得分:2)

Java的类型是有符号的,字节允许-128到+ 127之间的数字。这就是你得到-34为222值的原因

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

答案 1 :(得分:1)

所有整数类型(包括byte)都是用Java签名的,所以如果你将222粘贴到Java byte中就会出现溢出(导致你看到的负数)。如果您需要使用Java中的整数0-255范围,则至少需要short

但是,如果您只是将结果写为单个字节,则无需担心,因为其位模式表示与222中的unsigned byte完全相同

答案 2 :(得分:0)

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

byte b = a.byteValue();

您必须制作Long类型的对象:

Long a = new Long(222);

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

答案 3 :(得分:0)

当您打印一个字节时,它假定范围为-128到127。

如果您打印

byte b = (byte) 222;

你应该得到一个负数。

如果要存储范围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;

答案 4 :(得分:-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 =(byte)num;语句转换为字节格式。