J'ai quelques flotteurs de précision simple et double que je veux écrire et lire depuis un octet []. Y a-t-il quelque chose dans .Net que je peux utiliser pour les convertir vers et à partir de leurs représentations 32 et 64 bits IEEE 754?Comment obtenir la représentation binaire IEEE 754 d'un flottant en C#
16
A
Répondre
30
.NET Single et Double sont déjà au format IEEE-754. Vous pouvez utiliser BitConverter.ToSingle() et ToDouble() pour convertir octet [] en virgule flottante, GetBytes() pour aller dans l'autre sens.
5
Si vous ne voulez pas affecter de nouveaux tableaux tout le temps (ce qui est ce que GetBytes
fait), vous pouvez utiliser le code unsafe
pour écrire dans un tampon directement:
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;
}
}
Comment pouvons-nous faire cela sans l'aide GetBytes(). je veux dire en utilisant forloops –
@SriramSatti voir ma réponse –