2017-03-01 2 views
1

に私は、これらの機能があります。値ははショート書き方/ INT 1バイトのバッファ

fun asByteArray(value: Short): ByteArray { 
    val buffer: ByteBuffer = ByteBuffer.allocate(2) 
    buffer.order(ByteOrder.BIG_ENDIAN) 
    buffer.putShort(value) 
    buffer.flip() 
    return buffer.array() 
} 

fun asByteArray(value: Int): ByteArray { 
    val buffer: ByteBuffer = ByteBuffer.allocate(4) 
    buffer.order(ByteOrder.BIG_ENDIAN) 
    buffer.putInt(value) 
    buffer.flip() 
    return buffer.array() 
} 

場合は255、私は1つのバイトのバッファにそれを書きたいと思います。どうしたらいいですか? ByteBuffer.allocate(1)を実行してshort/int値を書き込もうとすると、BufferOverflowExceptionが発生します。

+0

あなたの実際の質問が回答されています。あなたはその質問を明確にするか、あなたがしようとしていることを正確に説明する新しい質問をするべきです。 –

答えて

1

value.toByte()の結果を書き、直接Intを記述しないでください:

fun asByteArray(value: Short): ByteArray { 
    val buffer: ByteBuffer = ByteBuffer.allocate(1) 
    buffer.put(value.toByte()) 
    return buffer.array() 
} 

fun asByteArray(value: Int): ByteArray { 
    val buffer: ByteBuffer = ByteBuffer.allocate(1) 
    buffer.put(value.toByte()) 
    return buffer.array() 
} 
+0

ありがとう!それは動作しますが、2バイトバッファにInt(4バイト)の値 "40000"を書きたいのですか? –

+0

ショートパンツはどうですか? (40000は「符号なし」です。そうでなければ40000を短くすることはできません) – Massimo

+0

はい。これは符号なしの短いですが、40000.toShort()は-25536を返します。正しいbuffer.putShort(40000.toShort())ですか? –

関連する問題