Existe-t-il une façon plus simple de faire cela? Étant donné un flux d'octets pour le convertir au type de numéro désiré.Interrupteur C# sur le type variable
(Assumer le code d'appel sera en charge les types de données pertinentes au nombre d'octets dans le flux).
public void GetValue(byte[] bytes, ref UInt16 value)
{
if (BitConverter.IsLittleEndian)
Array.Reverse(bytes);
value = BitConverter.ToUInt16(bytes, 0);
}
public void GetValue(byte[] bytes, ref UInt32 value)
{
if (BitConverter.IsLittleEndian)
Array.Reverse(bytes);
value = BitConverter.ToUInt32(bytes, 0);
}
public void GetValue(byte[] bytes, ref UInt64 value)
{
if (BitConverter.IsLittleEndian)
Array.Reverse(bytes);
value = BitConverter.ToUInt64(bytes, 0);
}
etc...
J'imagine qu'il ya une meilleure façon, en passant sur le type de valeur, par exemple, plutôt que d'avoir répliquées les surcharges.
Je * * en faisant commencer les méthodes renvoient une valeur et se débarrasser du paramètre 'ref' ... puis nommer les méthodes' GetInt32' etc. En utilisant un paramètre 'ref' juste donc vous pouvez surcharger la méthode me semble assez horrible. –
Oh, et vous pourriez vouloir regarder http://pobox.com/~skeet/csharp/miscutil qui inclut 'EndianBitConverter' ... –