2013-03-03 49 views
1

我需要得到0到25​​5之间的数字的字节/ 8位表示。有没有什么舒服的方式来在Java中做到这一点?看起来像大多数方法打算用4个字节的长整数工作?我的最终目标是将几个8位值写入文件。获取0到255之间数字的字节值?

感谢您的任何提示!

回答

3

byte type有什么问题?如果您只存储数据并且不进行算术运算,并且出于其他原因不需要十进制表示,那么它就不需要签名。

+1

对不起necropost,但作为一个例子,Java的Color对象需要0-255的数字。如果您正在处理一些非常复杂的事情,并且需要大量的这些数字,那么将它们存储为字节列表比存储整数列表更有效。 – 2016-02-20 13:27:10

13

要完成Alex的答案:

int i = 255; 
byte b = (byte) i; 
System.out.println("b = " + b); // b = -1 
int i2 = b & 0xFF; 
System.out.println("i2 = " + i2); // i2 = 255 
0

如果你打算把它读成int,只是& 0xff掩盖它。我建议在(In|Out)putStream之间有一层间接寻址。封面详细信息,如字节序。

在写对象:

public void unsignedByte(int value) throws IOException { 
    if (!(0 <= v && v <= 0xff) { 
     throw IllegalArgumentException(); 
    } 
    out.write(v); 
} 

在读取对象:

public int unsignedByte() throws IOException { 
    int v = in.read(); 
    if (v == -1) { 
     throw EndOfFileException(); 
    } 
    assert 0 <= v && v < 0xff; 
    return v; 
} 
3

小心字节。它是签署的,例如, -128至127。如果你想要0-255,当你打印出来时,你总是需要&255(正如JB Nizet在他的例子中所做的那样)

-2

如果你想获得表示,Java字节从-128到127被签名从0到255,我使用这2个功能

public static byte fromIntToByte(String value) throws Exception { 
     return fromIntToByte(Integer.parseInt(value)); 
    } 

    public static byte fromIntToByte(int value) throws Exception { 
     String stringByte = ""; 
     if (value < 0 && value > 255) { 
      throw new Exception("Must be from 0<=value<=255"); 
     } 
     if (value <= 127) { 
      for (int i = 0; i < 8; i++) { 
       stringByte = String.valueOf(value % 2) + stringByte; 
       value = value/2; 
      } 
     } else { 
      value = value/2; 
      for (int i = 0; i < 7; i++) { 
       stringByte = String.valueOf(value % 2) + stringByte; 
       value = value/2; 
      } 
      stringByte = "-" + stringByte; 
     } 
     System.out.println(stringByte); 
     byte b = Byte.parseByte(stringByte, 2); 
     return b; 
    } 
+1

这不是一个好的解决方案,它也不是正确的。将一个字节转换为一系列位并通过字符串函数传递它将非常缓慢。 – nneonneo 2016-04-18 12:47:16

1

1字节= 8位= 00000000〜11111111(二进制)= 0〜255(无符号字节) = 0×00〜0xFF的(十六进制小数)

C#:

1字节的值是0〜255

的Java:

1字节的值是:-128〜127

如果你想获得0〜255(无符号字节)的值:

字节b = (字节)值;

示例:字节b = (字节) 200;

INT B =值& 0xFF的;

例子:int B = 200 & 0xFF的;