.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")));
}
}
}