public static void writeShortLE(DataOutputStream out, short value) {
out.writeByte(value & 0xFF);
out.writeByte((value >> 8) & 0xFF);
}
public static void writeIntLE(DataOutputStream out, int value) {
out.writeByte(value & 0xFF);
out.writeByte((value >> 8) & 0xFF);
out.writeByte((value >> 16) & 0xFF);
out.writeByte((value >> 24) & 0xFF);
}
我正在使用上述两种方法撰写short
和int
。
我的问题是:如何撰写float
?
答案 0 :(得分:2)
您可以使用Float.floatToRawIntBits
获取由给定int
参数的位组成的float
,然后通过writeIntLE
写 :
public static void writeFloatLE(DataOutputStream out, float value) {
writeIntLE(Float.floatToRawIntBits(value));
}
要回读float
,您可以阅读int
并使用Float.intBitsToFloat
从中获取float
值。
来自Float.floatToRawIntBits
的链接文档:
根据IEEE 754浮点"单一格式&#34>返回指定浮点值的表示形式。位布局,保留非数字(
NaN
)值。位31(掩码
0x80000000
选择的位)表示浮点数的符号。位30-23(掩码0x7f800000
选择的位)代表指数。位22-0(由掩码0x007fffff
选择的位)表示浮点数的有效位数(有时称为尾数)。
答案 1 :(得分:0)
对于Kotlin的用户来说,这只是对arshajii的补充回答:
fun writeFloat32LE(out: DataOutputStream, valToAdd: Float) {
writeIntLE(out, valToAdd.toRawBits())
}
fun writeIntLE(out: DataOutputStream, value: Int) {
out.writeByte(value and 0xFF)
out.writeByte(value shr 8 and 0xFF)
out.writeByte(value shr 16 and 0xFF)
out.writeByte(value shr 24 and 0xFF)
}
读取功能可以简化为:
fun readFloat32LE(): Float {
val nInt = readIntLE()
return Float.fromBits(nInt)
}