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

Konwersja double to char C++

Hosting forpsi easy 1 pln
0 głosów
1,262 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,340 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,220 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,220 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,220 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 217 wizyt
0 głosów
2 odpowiedzi 1,296 wizyt
0 głosów
1 odpowiedź 141 wizyt
pytanie zadane 8 stycznia w C i C++ przez piotr_domanski Obywatel (1,750 p.)

92,113 zapytań

140,777 odpowiedzi

317,757 komentarzy

61,435 pasjonatów

Advent of Code 2023

Top 15 użytkowników

  1. 1004p. - Łukasz Eckert
  2. 992p. - Dawid128
  3. 941p. - Mikbac
  4. 923p. - rucin93
  5. 878p. - CC PL
  6. 860p. - TheLukaszNs
  7. 856p. - Eryk Andrzejewski
  8. 841p. - nidomika
  9. 818p. - sefirek
  10. 785p. - the Bielsky
  11. 755p. - ikarek-one
  12. 749p. - Michal Drewniak
  13. 726p. - Arkadiusz Waluk
  14. 715p. - adrian17
  15. 713p. - Henry Saele
Szczegóły i pełne wyniki

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.

Uwaga - w dniach od 02.12 do 08.12 trwają Mikołajki (książki drukowane mają rabat -35%, ebooki do -45%). Zaś dodatkowy, specjalny kod zniżkowy: HELMIKOLAJ-10 dla naszych Widzów zapewni Wam oszczędność -10zł dla zamówień powyżej 70zł! Warto korzystać!

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...