我有一些单精度和双精度浮点数,我想写入并从字节[]中读取。 .Net中是否有任何东西可用于将它们转换为32位和64位IEEE 754表示形式?
答案 0 :(得分:32)
.NET Single和Double已经采用IEEE-754格式。您可以使用BitConverter.ToSingle()和ToDouble()将byte []转换为浮点,GetBytes()可以反过来。
答案 1 :(得分:7)
如果您不想一直分配新数组(这是GetBytes
所做的),您可以使用unsafe
代码直接写入缓冲区:
static void Main()
{
byte[] data = new byte[20];
GetBytes(0, data, 0);
GetBytes(123.45F, data, 4);
GetBytes(123.45D, data, 8);
}
static unsafe void GetBytes(float value, byte[] buffer, int offset)
{
fixed (byte* ptr = &buffer[offset])
{
float* typed = (float*)ptr;
*typed = value;
}
}
static unsafe void GetBytes(double value, byte[] buffer, int offset)
{
fixed (byte* ptr = &buffer[offset])
{
double* typed = (double*)ptr;
*typed = value;
}
}