0b11111111がJavaのバイトであると言うと、「intをバイトに変換できません」ということは、11111111 = 256とjavaのバイト-128から127になります。しかし、バイトがちょうど8ビットのデータであれば、11111111の8ビットではありませんか? 11111111は整数かもしれませんが、私の状況では、バイト形式でファイルに送信する必要があるため、バイトとして表現する必要があります。では、ビット11111111のバイトをファイルに送信するにはどうすればいいですか(これは私の質問です)。 -1のバイナリ値を印刷しようとすると、11111111111111111111111111111111が得られます。それはなぜですか?私は、符号付きバイトの仕組みを実際に理解していません。11111111をJavaでバイトとして表現する方法
答えて
あなたはバイトに値をキャストする必要があります。
byte b = (byte) 0b11111111;
あなたはキャストを必要とする理由は、0b11111111
は(255の10進数値)int
リテラルであり、それが有効なbyte
の範囲外だということです値(-128〜+127)。
これを実行してからInteger.toBinaryString(b)を呼び出すと、11111111111111111111111111111111ではなく11111111が出力されます。なぜこの「バイト」が8ビット以上を出力しているのですか? 11111111? – user2350459
@ user2350459 - これは、 'byte'としてビットパターンが実際に' -1'であるからです。 'toBinaryString'を呼び出すと、引数を' byte'から 'int'に展開するので、** int' **値-1のバイナリ表現を取得します。 –
なぜ00000000000000000000000011111111と11111111が異なる番号になり、なぜ11111111111111111111111111111111と11111111が等しいのですか? – user2350459
Javaでは、16進リテラルが許可されますが、バイナリは許可されません。あなたはこれを使用した11111111のバイナリ値を持つバイトを宣言することができます。
byte myByte = (byte) 0xFF;
あなたにもint型とlong型にバイナリデータを格納するための六角リテラルを使用することができます。
編集:あなたは実際にJava 7以上でバイナリリテラルを持つことができます。
生のバイト値または文字列をファイルに書き出しますか?いずれの場合にも解決策があります。 –
生のバイトを私が信じているファイルに書きたいと思います。しかし、1と0の束を持つテキストファイルは、生のバイトを持つファイルと同じではありませんか? – user2350459
全くありません。 1バイトを生データとしてファイルに書き込むと、ファイルサイズは1バイトになります。ビット値の文字列表現を記述すると、ファイルサイズは8バイトになります。 [ここ](http://www.trustingeeks.com/difference-between-binary-and-text-files/)または[ここ](https://www.nayuki.io/page/what-are-binary)を参照してください。 -and-text-files)を使用してバイナリファイルとテキストファイルの違いを説明します。 –