我需要获取 0 到 255 之间数字的字节/8 位表示形式。在 Java 中是否有任何舒适的方法可以做到这一点?似乎大多数方法都适用于 4 字节长的整数?我的最终目标是将几个 8 位值写入文件。
感谢您对此的任何提示!
完成亚历克斯的回答:
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
小心字节。它是有符号的,例如 -128 到 127。如果你想要 0-255,当你去打印它时,你总是需要&255
(就像 JB Nizet 在他的例子中所做的那样)
What's wrong with byte
type? If you only store data and don't do arithmetic and don't need decimal representation for other reasons then it should not matter that it is signed.
1 字节 = 8 位 = 00000000~11111111(二进制)= 0~255(无符号字节)= 0x00~0xFF(十六进制)
C#:
1字节值是:0~255
爪哇:
1字节值是:-128~127
如果您想在 java 中获得 0~255(无符号字节)值:
字节 b = (字节)值;
例如:字节 b = (字节) 200;
int b = 值& 0xFF ;
例如: int b = 200 & 0xFF ;
如果您要将其读入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;
}
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;
}