• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Konwersja double to char C++

Object Storage Arubacloud
0 głosów
1,366 wizyt
pytanie zadane 13 sierpnia 2019 w C i C++ przez Mavimix Dyskutant (8,390 p.)
Jak przekonwertować zmienną double na zmienną char? Chcę wykonać obliczenia (z użyciem dobule) za pomocą programu na pc i wysłać je do mikrokontrolera (żeby wysłać dane muszę je mieć w char).
komentarz 14 sierpnia 2019 przez Maciej Złotorowicz Gaduła (4,230 p.)
To z czego?
komentarz 14 sierpnia 2019 przez tkz Nałogowiec (42,000 p.)
Nic, to po prostu wyrażenie C++.
komentarz 14 sierpnia 2019 przez Maciej Złotorowicz Gaduła (4,230 p.)
No nie wiedziałem. Masz mnie.
komentarz 14 sierpnia 2019 przez Mavimix Dyskutant (8,390 p.)
Niestety wciąż to nie działa
komentarz 14 sierpnia 2019 przez j23 Mędrzec (194,920 p.)

Ale co nie działa? reinterpret_cast czy przesłana binarnie wartość double?

2 odpowiedzi

0 głosów
odpowiedź 14 sierpnia 2019 przez JAKUBW Nałogowiec (33,470 p.)

No ogólnie double na char to troszkę nie jest możliwe, bo double ma 8 bajtów a char tylko 1, ale myślę, że na tablicę charów będzię OK. Przykładowy kod:

// Example program
#include <iostream>

int main()
{
    double myValue = 12.3023;
    std::cout << "Jako double przed konwersja: " << myValue << std::endl;
    
    char buffer[sizeof(double)];
    double* temp1 = (double*)&buffer;
    *temp1 = myValue;
    // tutaj możesz wysłać buffer gdzieś
    
    // tutaj mamy tablicę znaków z zakodowanym doublem
    std::cout << "Jako bajty (DEC): ";
    for (std::size_t i = 0; i < sizeof(double); ++i)
        std::cout << (int) buffer[i] << ' ';
    std::cout << std::endl;
    
    // dekodowanie na double
    double* temp2 = (double*)&buffer;
    double decodedValue = *temp2;
    
    std::cout << "Jako double po zdekodowaniu: " << decodedValue << std::endl;
}

Działający przykład: cpp.sh/64e2w

Można to zrobić krócej, ale pokazują się ostrzeżenia, można też zastąpić casty w stylu C na reinterpret_cast.

0 głosów
odpowiedź 14 sierpnia 2019 przez tangarr Mędrzec (154,780 p.)

Wystarczy proste rzutowanie.

void wyslij(const char* bufor, int dlugosc) {
    // kod wysyłający dane do kontrolera
}

void funkcja(double liczba) {
    double * wskaznik_double = &liczba;
    char * wskaznik_char = (char*)wskaznik_double;
    wyslij(wskaznik_char, sizeof(double));
}
 

Upewnij się tylko, że kontroler ma tą samą kolejność bitów. Jeżeli nie to będziesz musiał wysłać dane w odwrotnej kolejności.
 

komentarz 14 sierpnia 2019 przez Mavimix Dyskutant (8,390 p.)
Tego już próbowałem, niestety nie działa
komentarz 14 sierpnia 2019 przez tangarr Mędrzec (154,780 p.)
To znaczy co się dzieje?
Najlepiej zacznij od początku.
Jaki mikrokontroler programujesz?
W jaki sposób się z nim komunikujesz?
W jaki sposób sprawdzasz czy działa?
komentarz 19 sierpnia 2019 przez Mavimix Dyskutant (8,390 p.)
1. ATmega8

2. RS232 (przejściówka PL2303)

3. Robię zmienną dobuble, próbuje ją konwertować, a wynik wypisać na pc
komentarz 19 sierpnia 2019 przez tangarr Mędrzec (154,780 p.)
Wydaje mi się, że zmienna double na atmega8 ma długość 4 bajtów (informacja z internetu).
W takim razie może uda ci się ją wczytać do floata na komputerze. Nie wiem czy float i double na atmega mają taką samą mantisę. Warto spróbować.
Jeżeli ciągle będziesz dostawał zły wynik to wygeneruj kilka liczb napisz jakie dane otrzymałeś na komputerze (w hex bajt po bajcie).

Podobne pytania

0 głosów
0 odpowiedzi 302 wizyt
0 głosów
2 odpowiedzi 1,428 wizyt
0 głosów
1 odpowiedź 221 wizyt
pytanie zadane 8 stycznia 2023 w C i C++ przez piotr_domanski Bywalec (2,080 p.)

92,551 zapytań

141,395 odpowiedzi

319,526 komentarzy

61,936 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...