Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 7 lut 2025, o 21:48


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 9 ] 
Autor Wiadomość
PostNapisane: 27 wrz 2012, o 22:59 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 06 paź 2011
Posty: 108
Pomógł: 0

jak przeslac tablice np. 20 elementowa przez UDP ?

Oczywiscie, moge isc po najmniejszej sciezce oporu:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


ale zmudne to i nieeleganckie.
Oczywiscie moge w petli wysylac kazdy element w osobnej ramce i po drugiej stronie zapisac do tablicy, jednak chcialbym, zeby wszystko poszlo w jednej ramce.

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 wrz 2012, o 08:45 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27354
Lokalizacja: Szczecin
Pomógł: 1042

No rzeczywiście takie rozwiązanie to mało powiedzieć że mało eleganckie :( o żmudności już nie wspomnę szczególnie gdyby tablica miała mieć np 123 elementy

A nie znasz takich rzeczy w C jak pętle for(), while() itp ?

A nie znasz (jeśli nie to zajrzyj do PDF'a w AvrLibC na dysku w folderze WinAVR) ... takich funkcji wbudowanych jak:

strcpy() i w ogóle tych które dokonują operacji na stringach

albo nawet prostych do kopiowania zawartości pamięci wprost

memcpy() itp

Tyle że ty jak widzę tutaj dokonujesz jeszcze konwersji liczby na ASCII, więc pętla for() w rękę ;) i sprawa załatwiona w Try-Mi-Ga ;)

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 paź 2012, o 15:38 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 06 paź 2011
Posty: 108
Pomógł: 0

No tak, ależ to proste :roll:

Oczywiście, znam i chciałem wykorzystać pętle, tylko nie mam pojęcia jak jej użyć w połączeniu ze sprintf().
Bo przecież, taki zapis:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


nic mi nie da. Nie chcę gotowego rozwiązania, tylko podpowiedź, jak podejść do tego tematu, tak żeby z tablicy int zrobić string.); ɔıqʎɹʇɐz ǝƃoɯ ǝıu ı ɯɐʞnzs ' ɯɐʇʎzɔ

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 paź 2012, o 19:30 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 06 paź 2011
Posty: 108
Pomógł: 0

Wykombinowałem coś takiego:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


w wyniku dostaje w lancuchu str5 '1,2...8+dwa krzaczki'. Moglby mi ktos wyjasnic czemu lancuch nie konczy sie na '8' ? W dodatku dlugosc lancucha wynosi 10 (taki wynik zwraca funkcja strlen()

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 paź 2012, o 19:37 
Offline
Użytkownik

Dołączył(a): 17 mar 2012
Posty: 74
Lokalizacja: Okolice Gdańska
Pomógł: 3

Informacji możesz szukać głównie tutaj: C:/WinAVR/doc/avr-libc/avr-libc-user-manual/string_8h.html (po polsku pewnie w internecie też się jakieś info znajdzie).

Jak najprościej? Nie wiem, ja bym zrobił to tak:
- #include <string.h>
- stwórz funkcje intArrayToString(char jakiśBuffor[], int macierzIntów[], delimeter),
- w funkcji stwórz jakąś zmienną lokalną do przechowywania stringa z liczbą,
- for od i=0 do i < rozmiar macierzy intów (sizeof() powinno zadziałać),
- zamieniamy daną liczbę z macierzy na stringa funkcją np: dtostrf dla real lub itoa dla int,
- funkcją strcat łączymy stringi po kolei do jednego bufora (pierwszy string można wrzucić za pomocą strcpy - wtedy przy okazji czyścimy buffor.

The end ;)

Powinno działać.

------------------------ [ Dodano po: 5 minutach ]

str5 musi mieć rozmiar o jeden większy i string (macierz char) musi być zakończona wartością 0;

W skrócie:
char str5[9];
...
for(...
...
str5[8] = 0;


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 paź 2012, o 19:50 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 06 paź 2011
Posty: 108
Pomógł: 0

Dziękuję kolego za pomoc :D

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 paź 2012, o 19:56 
Offline
Użytkownik

Dołączył(a): 29 mar 2012
Posty: 595
Lokalizacja: Jaworzno
Pomógł: 39

ixxl napisał(a):
Wykombinowałem coś takiego:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


w wyniku dostaje w lancuchu str5 '1,2...8+dwa krzaczki'. Moglby mi ktos wyjasnic czemu lancuch nie konczy sie na '8' ? W dodatku dlugosc lancucha wynosi 10 (taki wynik zwraca funkcja strlen()


Bo te dwa ostatnie bajty to CR+LF (#13#10). Sprintf dodaje te znaczki/krzaczki jako koniec linii.

PP

_________________
Pozdrawiam
PP



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 paź 2012, o 20:18 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 06 paź 2011
Posty: 108
Pomógł: 0

To jednak nie koniec...

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


przy liczbach dwucyfrowych, w wyniku dostaje tylko pierwsza cyfre.
Funkcja sprintf() rozbija cyfry na poszczegolne czesci ?

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 paź 2012, o 21:19 
Offline
Użytkownik

Dołączył(a): 17 mar 2012
Posty: 74
Lokalizacja: Okolice Gdańska
Pomógł: 3

Reszta się nie mieści w str4. Pamiętaj zawsze o długości stringa, zakańczaniu go wartością 0 i uważaj na odwoływanie się do wartości z poza zakresu macierzy.

PS. lepsza nazwą dla str3 będzie int3 lub coś w tym stylu.

Lepszym wyjściem będzie zastosowanie pętli o jakiej pisałem w poprzednim poście - masz większą kontrolę nad generowanym stringiem.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 9 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 4 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO