Java が unsigned キーワードのようなものを提供していないことは誰もが知っています。さらに、byte
Java の仕様に従ったプリミティブは、 ~ の間の値を表し−128
ます127
。たとえば、abyte
がJava の場合、最初のものは として解釈さcast
れ、符号拡張が使用されます。int
bit
sign
次に、より大きいバイトを127
バイナリ文字列表現に変換する方法は??
byte
を単純に 8 ビットとして表示し、それらのビットを ~ の間の値として解釈することを妨げるものは何もありませ0
ん255
。また、他人の方法に自分の解釈を強制するためにできることは何もないことを覚えておく必要があります。メソッドが を受け入れる場合、特に明記されていない限り、そのメソッドはとbyte
の間の値を受け入れます。−128
127
したがって、これを解決する最善の方法は、メソッドを呼び出すか、プリミティブとしてキャストしてbyte
、値を値に変換することです。ここに例があります: int
Byte.toUnsignedInt()
int
(int) signedByte & 0xFF
public class BinaryOperations
{
public static void main(String[] args)
{
byte forbiddenZeroBit = (byte) 0x80;
buffer[0] = (byte) (forbiddenZeroBit & 0xFF);
buffer[1] = (byte) ((forbiddenZeroBit | (49 << 1)) & 0xFF);
buffer[2] = (byte) 96;
buffer[3] = (byte) 234;
System.out.println("8-bit header:");
printBynary(buffer);
}
public static void printBuffer(byte[] buffer)
{
for (byte num : buffer) {
printBynary(num);
}
}
public static void printBynary(byte num)
{
int aux = Byte.toUnsignedInt(num);
// int aux = (int) num & 0xFF;
String binary = String.format("%8s', Integer.toBinaryString(aux)).replace(' ', '0');
System.out.println(binary);
}
}
出力
8-bit header:
10000000
11100010
01100000
11101010