質問

い問題への交換原料-バイトの値をjavaです。私の受信バイト数よりデータグラムソケットとしてバイト配列になります。いいバイトとは何もわからない変換を適切に(意味しいオフセットが、知らない場合は何だと思いまたは訂正;)).

例えば、変換したい16ビットの符号なしshortにjavaのint型である。この例の一つは:

public int getUShort(byte[] bytes, int offset) {
    int b0 = bytes[offset] & oxFF;
    int b1 = bytes[offset + 1] & oxFF;

    return (b1 << 8) + (b0 << 0);

もう一つは同じだが、最後の行には:

return (b0 << 8)  + b1;

のコースで異なる。る適切なものはどれですか。ありがとうございます。いものを有効な例ではどのようなものための符号なしに長持ちするんですね。

"と彼は話します。

役に立ちましたか?

解決

利用できるdatainputstreamまたByteBufferを読む様々な種類です。利用できる署名の種類として符号なし値のほとんどの事業でも同じです。さんにおすすめしたい単純なクラスを明らかを使用でき署名の型が符号なし 符号なし

ByteBuffer b = ByteBuffer.wrap(bytes);
short s = b.getShort();
long l = b.getLong();

他のヒント

あったかどうせ仕事をこ械的風味さん一応前に線路かる最良の方法は、このような仕事で使用 ByteBuffer その変換 DoubleBuffer, LongBuffer, など。でき換バイト配列へ ByteBuffer を呼び出し

ByteBuffer myBuffer = ByteBuffer.wrap(myRawArray);

り、これらのバイトとしてのリスト intsを呼び出し

IntBuffer myIntBuffer = myBuffer.asIntBuffer();

ときに変換してバイトを呼び出し

int nextInt = myIntBuffer.get();

これらのクラスにも多くの支援一括"get操作だけを知りたいことだけを受けるビバップからハードバップのデータを同じタイプのネットワークを行うことができる変換は非常に早い。

代替的なアプローチは、可能であれば、何らかのJavaに基づく直列化を送信するデータのネットワーク.このときの変換も容易にストリームのライター。もちろん、これが利用できない場合だけのコミュニケーションの非Javaサーバーのものとして価値があるとします。

も遅くありがとうございます。

両方とも正しいのendianessのデータです。こちらをご参照: http://en.wikipedia.org/wiki/Endianness

return (b1 << 8) + b0;//little endian
return (b0 << 8) + b1;//big endian
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top