Zmiana liczb na ascii w c++, szyfrowanie

Odpowiedz Nowy wątek
2014-12-30 14:41
0

Istnieje około 100 symboli ASCII.
W swoim programie za pomocą rzutowania zmieniam cyfry na symbol, problem pojawia się gdy liczba jest większa niż 100 (a potrzebuję jeszcze większych liczb).

void szyfruj()
{
    a2 = static_cast<char> (a)+32;
    b2 = static_cast<char> (b)+35;
}

Jak inaczej szyfrować te dane lub jak zwiększyć ilość tych symboli?

edytowany 3x, ostatnio: Min0s, 2014-12-30 14:56

Pozostało 580 znaków

2014-12-30 14:44
1

Powyższe możesz sobie skrócić do:

void szyfruj()
{
    a = a2+32;
    b = b2+35;
}

więc żadnych cyfr na symboli nie zmieniasz.
Powiedz po ludzku co chcesz osiągnąć.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

2014-12-30 14:53
0
_13th_Dragon napisał(a):

Powyższe możesz sobie skrócić do:

void szyfruj()
{
a = a2+32;
b = b2+35;
}

więc żadnych cyfr na symboli nie zmieniasz.
Powiedz po ludzku co chcesz osiągnąć.

a i b to inty, a2 i b2 to char.
Najpierw wczytuje z pliku a2 i b2, a następnie zamieniam na inty

void deszyfruj()
{
    a = static_cast<int>(a2)-32;
    b = static_cast<int>(b2)-35;
}

W pierwszym poście podałem funkcję do szyfrowania, ale problem występuje, gdy szyfruje int większy od (około) 100. Wtedy zapisuje symbol, jednak po ponownemu wczytaniu i zdeszyfrowaniu wartość to ponad 4 miliiony :p.
Nic dziwnego, bo jest tylko 128 symboli ASCII.
Jak to ominąć?

edytowany 3x, ostatnio: Min0s, 2014-12-30 14:55

Pozostało 580 znaków

2014-12-30 15:02
1
  1. Przeanalizuj ten kod: http://ideone.com/kBpw32
  2. Wywal ten bezsensowny static_cast
  3. Napisz pełną treść zadania

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

2014-12-30 15:10
0
_13th_Dragon napisał(a):

# Przeanalizuj ten kod: http://ideone.com/kBpw32

  1. Wywal ten bezsensowny static_cast
  2. Napisz pełną treść zadania

1.Nie wiem jak to działa ._.
2.Why?
3.Te szyfrowanie to dla własnych potrzeb (gra), szyfruje dane, aby nie można było tak łatwo oszukiwać.
Chodzi o coś takiego:
Tworzę plik nowy.txt wpisuję symbol $ (ASCII 36), zapisuję z kodowaniem ANSI.
Następnie otwieram plik, przez strumień przenoszę symbol z pliku do zmiennej int przez rzutowanie.
Zmieniam wartość wczytanego inta na 200+ i ponownie otwieram plik, przez strumień rzutuję tego inta na chara i zapisuję.
Przy ponownym deszyfrowaniu powinno zwrócić te 200+, ale nie ma tylu symboli ASCII więc zwraca liczbę>4 mln.
Już rozumiesz? :D

Pozostało 580 znaków

2014-12-30 15:14
1

Ad 1. nie musisz konwertować pomiędzy char a int.
Ad 2. bo absolutnie nie jasne co chcesz zrobić. Jeżeli masz liczbę>4 mln oznacza to że prawdopodobnie masz gdzieś błąd ze znakiem, podaj kod.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

2014-12-30 15:22
1

Prawde mówiąc, również nie rozumiem co chcesz osiągnąć.
Jakiego strumienia używasz do wczytywania danych?
Jak je konwertujesz?
Może po prostu użyj ROT13 (Lub z dowolnym innym przesunięciem) ?

edytowany 1x, ostatnio: Proxima, 2014-12-30 15:23

Pozostało 580 znaków

2014-12-30 15:45
0

Wszystko działa dobrze do momentu, gdy zmienna osiągnie wartość 100+, więc nie może być błędu w kodzie.

Czyli działa, ale nie działa. Kod jest bezbłędny, ale działa błednie... czy Ty czytasz co piszesz? - Vardamir 2014-12-30 15:49

Pozostało 580 znaków

2014-12-30 16:08
0

Problem widać tu:

#include <iostream>
#include <fstream>
 
int main() {
    std::fstream dane;
            int e;
            char c;
            dane.open("plik.txt", std::ios::in | std::ios::out);
            dane >> c;
            e=(int)c;
            std::cout << e << "/" << c <<std::endl;
            dane.close();
            dane.open("plik.txt", std::ios::in | std::ios::out);
            std::cin >> e;
            c=(char)e;
            dane << c;
            std::cout << e << "/" << c <<std::endl;
            dane.close();
 
    return 0;
}

W pliku jest ten symbol: ☺ (ASCII 1).
Po wprowadzeniu wartości 155 i po ponownym uruchomieniu wartość się nie zgadza :p.

edytowany 1x, ostatnio: Min0s, 2014-12-30 16:13

Pozostało 580 znaków

2014-12-30 16:21
1
#include <iostream>
#include <fstream>
 
int main() {
    std::fstream dane;
            int e;
            char c;
            dane.open("plik.txt", std::ios::in | std::ios::out);
            dane >> c; // wczytałeś znak ale w pliku nadal jest ten znak
            e=(int)c;
            std::cout << e << "/" << c <<std::endl;
            dane.close();
            dane.open("plik.txt", std::ios::in | std::ios::out);
            std::cin >> e; // próbujesz znak odczytać jako liczbę więc nic się nie wczytuje w zmiennej e nadal są śmiecie
            c=(char)e; // skoro w e śmiecie to w c też
            dane << c; // wyświietlamy śmiecie
            std::cout << e << "/" << c <<std::endl;
            dane.close();
 
    return 0;
}

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
1.Jak skasować ten znak z pliku? 2.std::cin >> e //wczytuję liczbę, a później jest rzutowanie na znak - Min0s 2014-12-30 16:25
I jak usuwać te śmiecie? Napiszesz prawidłowy kod? :o - Min0s 2014-12-30 16:30

Pozostało 580 znaków

2014-12-30 16:35
1
#include <iostream>
#include <fstream>
 
int main()
  {
   while(true)
     {
      std::ifstream rd("plik.txt");
      char c;
      rd>>c;
      rd.close();
      std::ofstream wr("plik.txt");
      wr<<(int)c;
      wr.close();
      std::cout<<(int)c<<'/'<<c<<std::endl;
      rd.open("plik.txt");
      int e;
      rd>>e;
      rd.close();
      wr.open("plik.txt");
      wr<<(char)c;
      wr.close();
      std::cout<<e<<'/'<<(char)e<<std::endl;
      std::cin.ignore();
     }
   return 0;
  }

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
A mógłbyś z wykorzystaniem open()? :/ - Min0s 2014-12-30 16:38
Jest wykorzystany dwa razy. Człowieku po raz kolejny radzę, zacznij od przeczytania jakiegoś kursu z podstawami. - _13th_Dragon 2014-12-30 16:41
Btw. jakoś źle działa xd - Min0s 2014-12-30 16:41
Btw, działa dobrze, modyfikacje wprowadziłeś źle. - _13th_Dragon 2014-12-30 16:44

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0