2013-03-03 72 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的;