Problem z funkcjami - Wersja do druku +- Arduino Polska Forum (https://forum.arduinopolska.pl) +-- Dział: Korzystanie z Arduino (https://forum.arduinopolska.pl/dzial-korzystanie-z-arduino) +--- Dział: Programowanie w Arduino (https://forum.arduinopolska.pl/dzial-programowanie-w-arduino) +--- Wątek: Problem z funkcjami (/watek-problem-z-funkcjami) |
Problem z funkcjami - PrzemoVi - 01-11-2020 Witam. Na wstępie powiem tylko że programuję praktycznie we wszystkim poza C i C++, nie jestem przezwyczajony do niskiego poziomu i nie mam zielonego pojęcia co tu się dzieje, po 3 dniach się poddałem i proszę o pomoc ;/ Mam taki kod: Cytat: Sha256.init(); Funkcja formatToHex: Cytat:void formatToHEX(uint8_t* hash, char* chars) { Kod (w sumie pierwsza połowa) ma za zadanie wyliczyć hash słowa "qwer" i to działa jako-tako. Po hashu na serial monitorze pokazuje mi się kilka artefaktów: Cytat:f6f2ea8f45d8a057c9566a33f99474da2e5c6a6604d736121650e2730c6fb0a3 ⸮ 3 N N ⸮ ypowinno być: Cytat:f6f2ea8f45d8a057c9566a33f99474da2e5c6a6604d736121650e2730c6fb0a3 Ale sam hash jest poprawny. Gdy dorzucę niżej drugi blok z hashowaniem kolejnego słowa "asdf" to teoretycznie pod tym hashem powinien się pojawić kolejny, tym razem słowa "asdf" czyli powinno być tak: Cytat:f0e4c2f76c58916ec258f246851bea091d14d4247a2fc3e18694461b1816e13ba jest tak: Cytat:f6f2ea8f45d8a057c9566a33f99474da2e5c6a6604d736121650e2730c6fb0a3 ⸮ 3 N N ⸮ y Czyli zupełnie jakby zmienna hashStr łączyła się ze zmienną hashStr2. Bez sensu... Funkcja SHA256 jest w pełni sprawna, bo gdy zrobię tak: Cytat: Sha256.init(); To wszystko wyświetla się poprawnie. 2 hashe w osobnych linijkach bez żadnych artefaktów. Może mi ktoś naprostować co robię źle? Jeszcze co do tych artefaktów to rpzecież mam matrycę char która ma 64 pozycje i te 64 pozycje są wypełnione, więc skąd do h biorą się te artefakty...? Dzięki za wasz czas RE: Problem z funkcjami - Jarewa0606 - 01-11-2020 Nie czyścisz "hashStr" tak na moje oko .. W void formatToHEX(uint8_t* hash, char* chars) powinieneś wyczyścić stringa przed użyciem. Bo sama deklaracja char hashStr2[64]; Nie czyści... Rezerwuje tylko obszar w pamięci gdzie mogą być śmieci.. Zobacz tak Sha256.init(); Sha256.print("qwer"); uint8_t* hash = Sha256.result(); char hashStr[64] =""; formatToHEX(hash, hashStr); Serial.println(String(hashStr)); Sha256.init(); Sha256.print("asdf"); uint8_t* hash2 = Sha256.result(); char hashStr2[64] =""; formatToHEX(hash2, hashStr2); Serial.println(String(hashStr2)); Albo użyć zmienna.clear(); RE: Problem z funkcjami - PrzemoVi - 01-11-2020 (01-11-2020, 10:51)Jarewa0606 napisał(a): Nie czyścisz "hashStr" tak na moje oko .. W void formatToHEX(uint8_t* hash, char* chars) powinieneś wyczyścić stringa przed użyciem.Więc pogrzebałem trochę i doszedłem do tego, że trzeba char arraye zakańczać NULLem, więc zmieniłem funkcję tak: Cytat:void formatToHEX(uint8_t* hash, char* chars) { Działa, ale nie wydaje mi się to poprawne bo chars[] ma pozycje od 0 do 63 a ja ustawiam na NULL pozycję 64, więc naruszam jakiś inny obszar pamięci, tak? Czy powinienem zmienić rozmiar tablicy na 65 czy może to co robię jest okej? Dlaczego w ogóle muszę robić to manualnie? RE: Problem z funkcjami - Jarewa0606 - 01-11-2020 "a ja ustawiam na NULL pozycję 64" w której linijce?? bo ja nic takiego nie widzę.. Gdyby byla to tablica nie string to też bym powiedział że nie dajesz końca stringu ale ja się tam nie znam na stringach.. RE: Problem z funkcjami - PrzemoVi - 02-11-2020 (01-11-2020, 17:04)Jarewa0606 napisał(a): "a ja ustawiam na NULL pozycję 64"chars[64] = '\0'; to jest tablica RE: Problem z funkcjami - Jarewa0606 - 02-11-2020 A teraz widzę Nie naruszasz obszaru pamięci, a musisz manualnie bo masz konwersje char* do char[] |