.NET 4.x double в byte[] - C#

Узнай цену своей работы

Формулировка задачи:

В проекте преобразование из byte[] в double осуществляется следующим образом:
        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;
А теперь вот потребовалось сделать обратное преобразование, и что-то не соображу.BitConverter.ToDouble не подходит, т.к. получиться должно именно 2 байта, как и было до преобразования bytesToDouble.

Решение задачи: «.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")));
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4 из 5
Похожие ответы