Witamy na forum PC Format Zapraszamy do REJESTRACJI


Użytkownicy przeglądający ten wątek: 1 gości

Wysyłanie ramki danych jako 1 bajt - o co chodzi?

#1
Wysyłanie ramki danych jako 1 bajt - o co chodzi?
Witajcie pisaliśmy czat na informatyce i nie rozumiem jednego z zadań domowych: tj. tego 3

[Obrazek: 1.jpg]

Tzn. co dokładnie mam zrobić, bo zbytnio nie rozumiem, wysłać np. wynik dodawania 123+25=148 i zapisać to jako jeden znak w tablicy ASCII, a klient ma go odszyfrować, czy jak?
 System operacyjny: windows_seven Przeglądarka: firefox
#2
RE: Wysyłanie ramki danych jako 1 bajt - o co chodzi?
Cześć, na to wygląda:
Kod:
unsigned char ramka[3];
ramka[0] = 'd';
ramka[1] = 123;
ramka[2] = 32;
Poza tym z treści wynika, że nie trzeba się martwić przepełnieniem przy dodawaniu.
 System operacyjny: linux_ubuntu Przeglądarka: firefox
#3
RE: Wysyłanie ramki danych jako 1 bajt - o co chodzi?
(26.05.2015, 10:18)Szachista napisał(a): Cześć, na to wygląda:

Kod:
unsigned char ramka[3];
ramka[0] = 'd';
ramka[1] = 123;
ramka[2] = 32;
Poza tym z treści wynika, że nie trzeba się martwić przepełnieniem przy dodawaniu.

No właśnie nie wiem czy tak, czy on nie chciał żebyśmy zamienili to w serwerze z int na jeden znak char, czyli jeden znak z tablicy ASCII, przesłali w tej formie, tzn. klient otrzymałby np. cyfrę z tablicy ASCII dla tych danych 155 i wtedy w kliencie, to jakoś rozszyfrować, ale nie wiem właśnie jak.

Nasz kod, wygląda tak:

Kod:
int i = 2, wynik = 0;

if (odebrane[0] == 'o')
{
    if (odebrane[0] == 'o')
    {
        while (odebrane[i] >= '0' && odebrane[i] <= '9')
        {
            wynik = odebrane[i] - 48 + wynik * 10;
            i++;
        }
        
        suma = wynik;

A za wysyłanie:

Kod:
string tmp;
sprintf((char*)tmp.c_str(), "%d", suma);
wyniczek = tmp.c_str();

wodl = wyniczek.copy(server.sendbuf, wyniczek.length(), 0); //kopiujemy go do bufora

server.sendbuf[wodl] = '\0';//dodajemy znak konca stringa
cout << " Wyslalem -> " << wyniczek << endl;

// ta zmienna wyniczek to suma kilku liczb, bo w zadaniu jest, że dodawanie dla dwóch liczb

I czy jakbym przesłał tą liczbę w postaci jednego chara, to zaś w kliencie, po prostu wystarczyłoby, przypisać chara do inta?
 System operacyjny: windows_seven Przeglądarka: firefox
#4
RE: Wysyłanie ramki danych jako 1 bajt - o co chodzi?
Kod:
string tmp;
sprintf((char*)tmp.c_str(), "%d", suma);
Trochę to niebezpieczne - milcząco ktoś założył, że obiekt przydzielił wystarczająco dużo pamięci. Ten sam efekt można uzyskać korzystając z klasy ostringstream.

To by wystarczyło moim zdaniem (kwestia wypisania wyniku jako liczby jednobajtowej, a nie jako znaku).
 System operacyjny: linux_ubuntu Przeglądarka: firefox
#5
RE: Wysyłanie ramki danych jako 1 bajt - o co chodzi?
(26.05.2015, 17:34)Szachista napisał(a):
Kod:
string tmp;
sprintf((char*)tmp.c_str(), "%d", suma);
Trochę to niebezpieczne - milcząco ktoś założył, że obiekt przydzielił wystarczająco dużo pamięci. Ten sam efekt można uzyskać korzystając z klasy ostringstream.

To by wystarczyło moim zdaniem (kwestia wypisania wyniku jako liczby jednobajtowej, a nie jako znaku).

Ale tak jak teraz jest? I ogólnie to ja wymyśliłem ten skrawek kodu, bo był koniec ćwiczeń i wziąłem pierwszą lepszą konwersję z poradnika.
 System operacyjny: windows_seven Przeglądarka: firefox
#6
RE: Wysyłanie ramki danych jako 1 bajt - o co chodzi?
Tak. Po prostu napisz:
Kod:
server.sendbuf[0] = suma;
A po stronie klienta:
Kod:
cout << static_cast<unsigned int>(odebrane[0]);
 System operacyjny: linux_ubuntu Przeglądarka: firefox
Programy: Polecane / Nowe / Inne




Podobne wątki (Wysyłanie ramki danych jako 1 bajt - o co chodzi?)
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
  Autohotkey - wysyłanie zdarzeń do zminimalizowanego okna mastersajo 0 9555 08.02.2016, 22:20
Ostatni post: mastersajo
  wczytanie danych z pliku, filtrowanie danych, zapis wyniku do pliku tekstowego - C++ Martus 1 11473 21.10.2015, 22:43
Ostatni post: Szachista
  winapi-wysyłanie maili sfx 3 3645 08.07.2014, 21:49
Ostatni post: koneton

Skocz do: