[英]How to convert a float into a byte array and vice versa?
我試圖將float
轉換為原始byte[]
,反之亦然:
public byte[] floatToByteArray(final float value)
{
return new byte[]
{
(byte) (value >> 56),
(byte) (value >> 48),
(byte) (value >> 40),
(byte) (value >> 32),
(byte) (value >> 24),
(byte) (value >> 16),
(byte) (value >> 8),
(byte) (value)
};
}
奇怪的是,當我嘗試將新分配的byte[]
移回float
,結果只不過是垃圾。
但是,當我使用原始long
數據類型作為參數時,看起來好像相同的算法工作正常。
public byte[] longToByteArray(final long value)
{
return new byte[]
{
(byte) (value >> 56),
(byte) (value >> 48),
(byte) (value >> 40),
(byte) (value >> 32),
(byte) (value >> 24),
(byte) (value >> 16),
(byte) (value >> 8),
(byte) (value)
};
}
請改用它們。
public static byte [] long2ByteArray (long value)
{
return ByteBuffer.allocate(8).putLong(value).array();
}
public static byte [] float2ByteArray (float value)
{
return ByteBuffer.allocate(4).putFloat(value).array();
}
只是為了添加另一個基於@shazin解決方案的實用工具。 將float數組轉換為字節數組:
public static byte[] FloatArray2ByteArray(float[] values){
ByteBuffer buffer = ByteBuffer.allocate(4 * values.length);
for (float value : values){
buffer.putFloat(value);
}
return buffer.array();
}
它不會工作。 Float.byteValue只是將浮點值截斷為1個字節
public byte byteValue() {
return (byte)value;
}
此外,還不清楚你想要的字節數。 它是IEEE 754浮點單浮點位布局嗎? 然后你可以先將它轉換為int
int i = Float.floatToIntBits(1.1f); // see Float API, there are actually 2 options
然后使用shift將其分解為4個字節或8個字節,就像你一樣
同樣基於Shazin解決方案,還有關於字節順序的附加規范:
ByteBuffer.allocate(4).order(ByteOrder.LITTLE_ENDIAN).putFloat(value).array();
要么
ByteBuffer.allocate(4).order(ByteOrder.BIG_ENDIAN).putFloat(value).array();
我看不到易於使用的方法。 有用:
public static byte[] toByteArray(float value) {
byte[] bytes = new byte[4];
ByteBuffer.wrap(bytes).putFloat(value);
return bytes;
}
public static float toFloat(byte[] bytes) {
return ByteBuffer.wrap(bytes).getFloat();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.