float na 4 bajty

0

Witam chciałbym przetworzyć liczbę typu float na 4 bajty jednak coś mi nie wychodzi, po przetworzeniu bajty będą umieszczone w ramce w takiej kolejności b3,b2,b1,b0. Robię to tak.

 byte b0 = (byte)cisnienie,
               b1 = (byte)(cisnienie >> 8),
                b2 = (byte)(cisnienie >> 16),
                 b3 = (byte)(cisnienie >> 24);

Wywala mi błąd że nie można zastosować operatora >> nie wiem co jest grane. Ciśnienie to liczba typu float. A raczej musi nią być bo to później idzie do urządzenia.

2
byte[] b = BitConverter.GetBytes(cisnienie);
//
 byte b0 = b[0],
               b1 =b[1],
                b2 = b[2],
                 b3 = b[3];
0

Bo nie ma operatorów >> i << dla liczb zmiennoprzecinkowych.
Internet podpowiada, że to co chcesz osiągnąć można zrobić w taki sposób.

0

ok dzięki

0

Możesz zamienić na bajty albo bity za pomocą rzutowania albo za pomocą klasy BitConverter

using System;
namespace ConsoleApp64
{
    class Program
    {
        static void Main(string[] args)
        {
            double dV = 100.0;
            float fV = 100.0f;
            unsafe
            {
                long* v1 = (long*)&dV;
                long v2 = *v1;

                int* v3 = (int*)&fV;
                int v4 = *v3;
                Console.WriteLine(LongToBits(v2));
                Console.WriteLine(IntToBits(v4));
            }

            long v5 = BitConverter.DoubleToInt64Bits(100.0);
            Console.WriteLine(LongToBits(v5));

            byte[] tB = BitConverter.GetBytes(100f);
            int l = BitConverter.ToInt32(tB, 0);

            Console.WriteLine(IntToBits(l));
        }

        static string LongToBits(long vL)
        {
            char[] tB = new char[64];
            for (int i = 63; i >= 0; i--)
            {
                if ((vL & 1) == 1) tB[i] = '1';
                else
                    tB[i] = '0';
                vL = vL >> 1;
            }
            return new string(tB);
        }

        static string IntToBits(int vI)
        {
            char[] tB = new char[32];
            for (int i = 31; i >= 0; i--)
            {
                if ((vI & 1) == 1) tB[i] = '1';
                else
                    tB[i] = '0';
                vI = vI >> 1;
            }
            return new string(tB);
        }
    }
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1