我需要得到0到255之間的數字的字節/ 8位表示。有沒有什麼舒服的方式來在Java中做到這一點?看起來像大多數方法打算用4個字節的長整數工作?我的最終目標是將幾個8位值寫入文件。獲取0到255之間數字的字節值?
感謝您的任何提示!
我需要得到0到255之間的數字的字節/ 8位表示。有沒有什麼舒服的方式來在Java中做到這一點?看起來像大多數方法打算用4個字節的長整數工作?我的最終目標是將幾個8位值寫入文件。獲取0到255之間數字的字節值?
感謝您的任何提示!
byte
type有什麼問題?如果您只存儲數據並且不進行算術運算,並且出於其他原因不需要十進制表示,那麼它就不需要簽名。
要完成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
如果你打算把它讀成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;
}
小心字節。它是簽署的,例如, -128至127。如果你想要0-255,當你打印出來時,你總是需要&255
(正如JB Nizet在他的例子中所做的那樣)
如果你想獲得表示,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;
}
這不是一個好的解決方案,它也不是正確的。將一個字節轉換爲一系列位並通過字符串函數傳遞它將非常緩慢。 – nneonneo 2016-04-18 12:47:16
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的;
對不起necropost,但作爲一個例子,Java的Color對象需要0-255的數字。如果您正在處理一些非常複雜的事情,並且需要大量的這些數字,那麼將它們存儲爲字節列表比存儲整數列表更有效。 – 2016-02-20 13:27:10