logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[C#]Obsługa portu szeregowego (wyświetlanie odebranego bajtu)

bkdi 30 Lis 2011 19:43 1647 1
REKLAMA
  • #1 10202605
    bkdi
    Poziom 12  
    Posty: 88
    Witam!

    Napisałem program, który wysyła i odbiera dane za pomocą portu szeregowego. Program jest prosty, od razu po wciśnięciu klawisza na klawiaturze przekazuje dany znak do odbiorcy.

    Zastanawia mnie jedna rzecz. Skoro port szeregowy ma 8 bitową szynę danych to dlaczego przesłanie pojedynczego znaku powoduje przesłanie 2 bajtów, a nie jednego?
    Rozumiem, że w C# zmienna char ma 16 bitów i to może być spowodowane tym faktem, ale przesyłając np. znak '3' przesyłam wartość 0x0033, czyli przesyłam dwa bajty 0x00 oraz 0x33, zatem w odbiorze wyświetla się tylko '3' bo 0x00 to NULL. Byłoby to dla mnie zrozumiałe, ale wysyłając znak 'ć' wartości 263 czyli 0x0107 wysyłam dwa bajty 0x01 oraz 0x07 czyli znak SOH i BEL według tablicy ASCII, czyli rozumiem nic nie powinno się wyświetlić w oknie odbioru, a ja otrzymuję znak '?' czyli 0x3F? Czym to jest spowodowane?
  • REKLAMA
  • #2 10204593
    Luklukowaty
    Poziom 19  
    Posty: 394
    Pomógł: 29
    Ocena: 42
    Zaletą nowoczesnych języków programowania jest fakt, że domyślnie ciągi znaków kodują w Unicode. Jak dobrze zauważyłeś zmienna char ma 16 bitów, ponieważ jeden znak w Unicode zajmuje dwa bajty. W związku z tym nie możesz rozpatrywać poszczególnych bajtów w kategorii ASCII.

    0x0107 w Unicode to właśnie 'ć' (http://pl.wikipedia.org/wiki/Kodowanie_polskich_znak%C3%B3w)

    Wszystko jest dobrze i radzę pamiętać o ASCII jedynie ze względu na kompatybilność ze starymi technologiami i korzystać z Unicode w programowaniu na PC.
REKLAMA