Konversja float na tablice bytów dla modbusa

Konversja float na tablice bytów dla modbusa
RO
  • Rejestracja:ponad 17 lat
  • Ostatnio:około 2 lata
  • Lokalizacja:Warszawa
  • Postów:75
0

Witam potrzebuje funkcji która za stringa(zapisany w nim jest float ) zamieni ja stringa który przechowuje dane w formie "<byte1 w HEx> <byte0 w HEx> <byte3 w HEx> <byte2 w HEx> " w wersji
Poniżej jest funkcja której używam spełnia moje wymagania jednakże mam nieodparte wrażenie że da się to zrobić prościej, prosiłbym o zaproponowanie nowej wersji funkcji

Kopiuj
public static string KonwersjaReal(String Dane)
        {
            float Liczba;
            float.TryParse(Dane, out Liczba);
            //BitConverter.IsLittleEndian;
            byte[] ByteLiczba = BitConverter.GetBytes(Liczba);
            byte[] Temp = new byte[2];
           
            for (int i = 0; i < 2; i++)
            {
                Temp[i] = ByteLiczba[2 * i];
                ByteLiczba[2 * i] = ByteLiczba[2 * i + 1];
                ByteLiczba[2 * i + 1] = Temp[i];
            }

            return BitConverter.ToString(ByteLiczba,).Replace("-", " ");
        } 

Poszukiwanie narzędzia do tworzenia instalatora
edytowany 1x, ostatnio: Robotyka
somekind
Moderator
  • Rejestracja:około 17 lat
  • Ostatnio:6 dni
  • Lokalizacja:Wrocław
RO
  • Rejestracja:ponad 17 lat
  • Ostatnio:około 2 lata
  • Lokalizacja:Warszawa
  • Postów:75
0

Niestety analiza informacji na stronie pod podanym adresem nie pomogła mi. Z tego co widzę to Single.Parce dotyczy konwersji liczby stringa na float.
Czyli jest to bardziej zaawansowana forma float.TryParse(Dane, out Liczba);

W związku z tym zastosowanie nie skraca i nie poprawia mojej funkcji.

Dzięki za linka może przyda się później.


Poszukiwanie narzędzia do tworzenia instalatora
somekind
Moderator
  • Rejestracja:około 17 lat
  • Ostatnio:6 dni
  • Lokalizacja:Wrocław
0

No tak, nie przyjrzałem się i zrozumiałem, że chodzi Ci o coś odwrotnego. Bez sensu ten mój link.

Ja bym przede wszystkim usunął pętlę, która nic tu nie daje, a po drugie użył string.Join i byte.ToString():

Kopiuj
public static string KonwersjaReal(string text)
{
    float number;
    float.TryParse(text, out number);
    byte[] bytes = BitConverter.GetBytes(number);
    byte[] swaped = new byte[] { bytes[1], bytes[0], bytes[3], bytes[2] };
    return string.Join(" ", swaped.Select(s => s.ToString("X2")));
}
Azarien
można też użyć .Reverse zamiast tego swaped, będzie bardziej LINQ :)
somekind
No chyba nie bardzo, bo tu jest odwrócenie parami, a nie całości.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.