2017-03-01 72 views
1

我有以下功能:如何编写短/诠释为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

不要直接写Int,写的value.toByte()结果:

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

谢谢!它的工作原理,但如果我想写Int(4字节)值“40000”到2字节缓冲区? –

+0

写短裤怎么样? (40000将是一个“无符号短”,否则你不能有40000短) – Massimo

+0

是的。它是无符号短,但40000.toShort()给我-25536。是否正确buffer.putShort(40000.toShort())? –

相关问题