2012-03-20 21 views
5

C#の世界から来て、Javaでブラッシングすると、私は符号なしバイト/ intがないことを学びました。私は、次の例のようなカスタムバイナリメッセージを構築する最も簡単な方法であるかを見つけるためにしようとしています:あなたが見ることができるように、特定の整数値は、3ビットのスロットに配置する必要がありJavaでカスタムバイナリデータメッセージを設定する最も簡単な方法は何ですか?

enter image description here

。他の値はシングルビットフラグまたは他のサイズフィールドです。私が読んだことから、ビットワイズ演算子を使用して整数のバイナリバイトを構築するなど、次の大きなプリミティブで作業する必要があります。他の方法はありますか?私は他の場所などのあるいくつかの例続いている(注:この例では、上記のグラフィック一致していません):

shiftedValue1 = (value1 & 0xFF) << 5; 
shiftedValue2 = (Value2 & 0xFF) << 2; 
shiftedValue3 = (Value3 & 0xFF) << 1; 
shiftedValue4 = (Value4 & 0xFF); 
finalvalue = (shiftedValue1 & 0xFF) | (shiftedValue2 & 0xFF) | (shiftedValue3 & 0xFF) | (shiftedValue4 & 0xFF); 

は、これらのバイトを構築するためのより良い方法はあり構造化最初のバイトを得るためには? 4バイトフィールドでは何を使用しますか?ロング?

+0

たぶん私は無知ですが、符号なしの値のようなフィールドを見る伝統があるにもかかわらず、それらを符号付きの値として扱うのに実際に問題がありますか? C#で、1バイトのフィールドが0( '00')から255(FF)までの範囲であると見なした場合、0から127までの範囲(00〜 7F')と-128~-1(「80~FF」)私が働いているところでは、パートナー/顧客の一部がこれを正確に実行します。 Cのenumに '0x85'と表示される値はXML属性に' '-123" 'として表示されます。それはちょっと変わったように聞こえますが、決して問題は生じません。 – ruakh

+0

私は実際にその方向に進むことを試みるかもしれません... – kuhnto

答えて

1

byte[](バイト配列)またはBitSetを使用すると、このように見えます。

+0

私はもともとバイト[]を使っていましたが、バイト配列のバイトはまだ署名されており、これは少し操作が必要です。 – kuhnto

1

たとえばByteBufferを使用することができます。 here。バイト配列を操作しやすくする必要があります。特に、エンディアンを考慮してください。

+0

それは本当に良い記事です。 – kuhnto

関連する問題