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

Konwersja zmiennej char na int w języku C – jak poprawnie wykonać?

cristof_w 26 Lip 2007 07:35 20375 7
REKLAMA
  • #1 4115666
    cristof_w
    Poziom 17  
    Posty: 338
    Pomógł: 3
    Ocena: 9
    Witam.
    Problem jak w temacie.
    Mam zmienną char a potrzebuję mieć int.
    Poszukałem i nic ciekawego nie znalazłem. Znalazłem jedną funkcję w knidze ANSI C, ale ten przykład mnie nie odpowiada.
    Czy ktoś może podać jak należy zamienić char na int?
    Byłbym wdzięczny.
    Pozdrawiam.
  • REKLAMA
  • #2 4115729
    Pituś Bajtuś
    Poziom 28  
    Posty: 934
    Pomógł: 137
    Ocena: 10
    Na tak sformułowane pytanie odpowiedź wygląda tak:
    char ch;
    int i;
    
    i = (int)ch;


    Ale zapewne nie o to chodziło. Podejrzewam, że masz tablicę zmiennych char (napis) który chcesz przekonwertować na odpowiadającą mu liczbę int?
  • REKLAMA
  • #3 4115841
    sawitar
    Poziom 18  
    Posty: 228
    Pomógł: 20
    Ocena: 19
    W języku C zmienna typu char różni się od zmiennej typu int tylko zakresem zmienności. Nie ma rozróżnienia na typ znakowy i numeryczny, a więc na zmiennej char możesz dokonywać dowolnych operacji.

    To o co pytasz nazywa się rzutowanie typów i może być :
    - "w góre" (awans) jeśli z typu o mniejszym zakresie zmienności rzutujesz na coś większego (np: z char na int ) i jest to dokonywane automatycznie przez kompilator (rzutowanie niejawne), lub na twoje wyraźne życzenie (rzutowanie jawne)
    -"w dół" gdy rzutujesz z typu większego na mniejszy (z int na char), odbywa się to przez obcięcie starszej części. Jeśli przechowywana wartość w typie pojemniejszym jest większa od zakresu zmienności typu mniejszego to wartość taka zostanie przypisana niepoprawnie. Przy próbie rzutowania niejawnego kompilator języka C zgłosi warming.

    Rzutowanie jawne wykonuje się w sposób jaki opisał Pituś Bajtuś.

    Zachęcam do lektury "ANSI C"
  • REKLAMA
  • #4 4115901
    krzemowy
    Poziom 19  
    Posty: 296
    Pomógł: 23
    Ocena: 5
    Rozumiem że w zmiennej tekstowej masz liczbę zakodowaną jako ASCII, można to przekonwertować na różne sposoby w int, np. w WinAVR można tak(cytat z dokumentacji):

    6.19.4.4 int atoi (const char * string)
    Convert a string to an integer.
    The atoi() function converts the initial portion of the string pointed to by nptr to
    integer representation.
    It is equivalent to:
    (int)strtol(nptr, (char **)NULL, 10);
    except that atoi() does not detect errors.


    W przypadku gdy jest to jedna cyfra(tzn. stricte zmienna char) to najprościej zajrzeć do tablicy ASCII i użyć jednej instrukcji if oraz odejmowania.
  • REKLAMA
  • #5 4116791
    bobbyAIR
    Poziom 20  
    Posty: 267
    Pomógł: 41
    Ocena: 6
    Nie jako asci bo zczytana z czujnika wiec jako jakas liczbe. Dla kontrolera to "to samo" co int
  • #6 4116853
    zumek
    Poziom 39  
    Posty: 3352
    Pomógł: 695
    Ocena: 52
    cristof_w napisał:
    Mam char (bajt) szczytywany z czujnika temperatury. Muszę go zamienić na int, żeby, po dalszej obróbce, móc go wyswietlic na LCD.

    A jakieiż to obróbce , chcesz poddać tego char-a :?:

    Piotrek

    edit
    Poprawiłem cytat i autora ;)
  • #7 4116941
    Fajfer2
    Poziom 20  
    Posty: 507
    Pomógł: 18
    Ocena: 14
    może chodzi ci o zamianę dwóch zmiennych typu "char" na
    jedną zmienną "int" (np. z przetwornika 10 bitowego) ?
  • #8 4117351
    bobbyAIR
    Poziom 20  
    Posty: 267
    Pomógł: 41
    Ocena: 6
    Przetwornik możesz odczytać np:
    int a;
    ......
    a = ADCW;
    Jesi masz troche inaczej jak sie domyslam:
    char a,b;
    .......
    a = ADCH;
    b = ADCL;
    to wyrażenie
    (a<<8)|b możesz traktowac jako liczbę typu int ( char już nie bo ma tylko 8 bit w AVRlibc, jeśli się nie mylę ale głowy nie dam ). I jeszcze raz napiszę char na int nie musisz konwertować. W C char i int to TO SAMO w sensie typu, różni sie tylko zakresem zmienności.
    czyli coś takiego
    void fun(int arg){
    }
    ....
    char b;
    fun(b);

    Jest jak najbardziej poprawne

Podsumowanie tematu

LABEL_AI_GENERATED
W dyskusji omówiono konwersję zmiennej typu char na int w języku C. Podkreślono, że char i int różnią się głównie zakresem wartości, a rzutowanie z char na int jest automatyczne (rzutowanie niejawne) lub może być wykonane jawnie przez rzutowanie typów (np. (int)ch). W przypadku, gdy char reprezentuje znak ASCII cyfry, konwersję na wartość liczbową int można wykonać przez odejmowanie wartości '0' lub użyć funkcji atoi() do konwersji łańcucha znaków na int. W kontekście mikrokontrolerów AVR wskazano, że dwie zmienne char (np. ADCH i ADCL) można połączyć w jedną zmienną int za pomocą operacji bitowych (np. (a
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA