Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

c# - Konwersja Int16 do tablicy Byte

mkpl 16 Mar 2015 10:22 717 5
  • #1 16 Mar 2015 10:22
    mkpl
    Poziom 37  

    Witam

    W jaki sposób przekształcić np wartość Int16 na tablicę byte o dwóch rekordach?

    Konkretnie problem polega na tym, że odczytuję z systemu czas i chciałbym go przekształcić na n elementową tablicę typu Byte i wysłać przez RS232.

    Odczytać czas mi się udaje bez problemu, jak i wysyłam bez problemu odpowiednio przygotowaną tablicę byte.

    Docelowo chciałbym aby format godziny np 12-32-24 przepisać do tablicy tak aby każda cyfra była w osobnym jej rekordzie.

    Jak to ugryźć?

    0 5
  • Pomocny post
    #2 16 Mar 2015 11:35
    tomi1800
    Poziom 9  

    Siemanko, nie wiem czy dokładnie o to Ci chodzi ale przykładowo mamy taką sytuację:

    sczytujemy z portu com sekwencję wysyłanych znaków np.

    string com1;

    następnie tworzymy tablicę string i rozdzielamy przychodzącą do niej sekwencje com1 np.

    string[] podzial = com1.Split(',');

    A teraz jak to wygląda na przykładzie: mamy np ciąg znaków 2342,5325,4,24,3 itd

    po odebraniu i zastosowaniu linijki z kodem string[] podzial otrzymamy:
    [0] - 2342
    [1] - 5325
    [2] - 4
    itd.

    Co jednak np zrobić, jeśli otrzymamy ciąg 5235325325. Możemy tutaj zastosować komendę Substring(początek_znaku, długość_znaku)
    np.

    string zmienna = podzial[0].Substring(0, 2) w tym przypadku z ciagu 5235...25
    otrzymamy pod zmienną o nazwie "zmienna" przypisaną wartość 52.


    Edt. No i przykładowo na Twoim przykładzie:

    12-32-24

    robimy np tak:

    string czas = "12-32-24";
    string[] tablica = czas.Split('-');

    byte godzina = Convert.ToByte(tablica[0]);
    byte minuta = Convert.ToByte(tablica[1]);
    byte sekunda = Convert.ToByte(tablica[2]);

    Coś takiego, możesz na tym pokombinować.

    0
  • #3 16 Mar 2015 11:48
    mkpl
    Poziom 37  

    Sporo mi wyjaśniłeś i uprzedziłeś następne pytania :D.

    Jeśli chodzi o problem z godziną. To wyłuskałem sobie z kompletnej godziny same sekundy i mam w zmiennej byte np 53 ale do wyświetlacza muszę osobno wysłać 5 i 3 tak więc musiały byt e cyfry być jako osobne wartości w tablicy i z tym mam problem.

    0
  • #4 16 Mar 2015 11:56
    tomi1800
    Poziom 9  

    To co Ci napisałem wykorzystuje mniej więcej do odbierania danych z surowego GPSa smd, podłączonego do konwertera RS232->USB. No i wiadomo, dostaję ramki danych i je muszę rozłożyć itd.

    jeśli masz te 53 zapisane i musisz wysłać oddzielnie to również można zastosować Substring, tylko że najpierw to musi być jako zmienna string np.

    string sekundy = "53";

    następnie robimy substring:

    string sekunda1 = sekundy.Substring(0,1); -> 0 - pozycja w stringu, 1 - długość czyli wskazujemy na 0 pozycję czyli "5" a następnie o długości 1 licząc od zera czyli tylko "5",

    druga zmienna:

    string sekunda2 = sekundy.Substring(1,1); no i sytuacja taka sama jak wyżej.

    Następnie możesz użyć Convert.ToByte tak jak opisałem wyżej.

    Możesz napisać z czym dokładnie walczysz?? Wysyłasz dane bezpośrednio na wyświetlacz, czy używasz też mikrokontrolera? Bo właśnie też mam teraz lekki problem bo chcę sterować czujnikiem ultradźwiękowym HC SR-04 ale bez pomocy mikrokontrolera tylko przez komputer. Zrobiłem mały postęp dzisiaj rano ;) ale jeszcze wczoraj było to niemożliwe.

    PS. Pamiętaj, że ze zmiennej string możesz zrobić właściwie wszystko:

    przykładowo odebraną zmienną string możesz próbować przekształcić na byte albo int np:

    string czesc = "23,213,21321";
    string[] tablica = czesc.Split(',');

    int c = int.Parse(podzial[0]); -> parse robi to, że jeśli jest liczba całkowita to wyciąga ją ze stringa bez konwersji Convert.To

    0
  • #5 16 Mar 2015 12:16
    mkpl
    Poziom 37  

    W zasadzie to zaczynam i uczę się dopiero C#. Postawiłem sobie za cel wysyłać w różny sposób i sterować wyświetlaczem z kasy fiskalnej.

    Docelowo jak opanuję podstawy to będę pisał program do analizatora, do którego program będzie wysyłał odpowiednie wartości z częstotliwościami a następnie odbierał odczyty z ADC i wyświetlał na wykresie (wykres właśnie udało mi się ogarnąć ;)).

    Nie wiem jak sterujesz tego HC SR-04 ale ja bym podłączył się pod linie sterujące RS232. Tj. RTS CTS itp. Powinno to działać bezproblemowo bo nie obowiązuje Cię wtedy ramka danych tylko czytasz wystawione bity.

    0
  • #6 16 Mar 2015 14:05
    p.kaczmarek2
    Poziom 23