.NET 4.x double в byte[] - C#
Формулировка задачи:
В проекте преобразование из byte[] в double осуществляется следующим образом:
А теперь вот потребовалось сделать обратное преобразование, и что-то не соображу.BitConverter.ToDouble не подходит, т.к. получиться должно именно 2 байта, как и было до преобразования bytesToDouble.
private double bytesToDouble(byte firstByte, byte secondByte) { int s = ((int)secondByte << 8) + firstByte; if (s >= 32768) return (s - 65536) / 32768.0; return s / 32768.0;
Решение задачи: «.NET 4.x double в byte[]»
textual
Листинг программы
using System; using System.Linq; using System.Runtime.InteropServices; namespace ConsoleApplication155 { [StructLayout(LayoutKind.Explicit)] struct MyStruct { [FieldOffset(0)] public float f; [FieldOffset(0)] public byte byte1; [FieldOffset(1)] public byte byte2; [FieldOffset(2)] public byte byte3; [FieldOffset(3)] public byte byte4; } class Program { static void Main() { float f = 12.0f; Console.WriteLine(GetHex(f)); Console.WriteLine(UnsafeGetHex(f)); Console.ReadKey(); } private static string GetHex(float f) { var my = new MyStruct {f = 12.0f}; return string.Format("0x{0}{1}{2}{3}", my.byte1.ToString("X"), my.byte2.ToString("X"), my.byte3.ToString("X"), my.byte4.ToString("X")); } private static string UnsafeGetHex(float value) { return "0x" + string.Join(string.Empty, BitConverter.GetBytes(value).Select(x=>x.ToString("X"))); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д