У меня есть одиночные и двойные прецизионные поплавки, которые я хочу записать и прочитать из байта []. Есть ли что-нибудь в .Net, которое я могу использовать для преобразования их в свои 32 и 64-разрядные представления IEEE 754 и из них?
Как получить двоичное представление IEEE 754 для float в С#
Ответ 1
.NET Single и Double уже находятся в формате IEEE-754. Вы можете использовать BitConverter.ToSingle() и ToDouble() для преобразования байта [] в плавающую точку, GetBytes(), чтобы пойти наоборот.
Ответ 2
Если вы не хотите выделять новые массивы все время (это то, что делает 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;
}
}