» »

Kodirni program ADFGX oz. ADFGVX

Kodirni program ADFGX oz. ADFGVX

Small_Hobit ::

Pozdravljeni!

Zanima me oz. bi prosil za pomoč pri pretvorbi tega C# programa v programski jezik C++. Na področju C# nisem ravno najbolj doma.

extern "C" __declspec(dllexport)BSTR sifriraj(char* besedilo, int dolzinaBesedila, char matrika[6][6], char* geslo, int dolzinaGesla)
{
	string zakodiranoBesedilo;
	int stevec = 0;

	for(int st = 0; st < dolzinaBesedila; st++)
	{
		besedilo[st] = tolower(besedilo[st]);

		if(besedilo[st]=='š')
		{
			besedilo[st]='s';
		}

		else if(besedilo[st] == 'č')
		{
			besedilo[st] = 'c';
		}

		else if(besedilo[st] == 'ž')
		{
			besedilo[st] = 'z';
		}

		else if(besedilo[st] == 'j')
		{
			besedilo[st] = 'i';
		}

		else if(besedilo[st] < 'a' || besedilo[st] > 'z')
		{
			for(int st1=st; st<dolzinaBesedila; st++)
			{
				besedilo[st1] = besedilo[st1 + 1];
			}

			dolzinaBesedila--;
		} 
	}
	stevec=0;
	for(int st = 0; st < dolzinaBesedila; st++)
	{
		for(int st1=1; st1<6; st1++)
		{
			for(int st2=1; st2<6; st2++)
			{
				if(besedilo[st] == matrika[st1][st2])
				{
					zakodiranoBesedilo+=matrika[st1][0];
					zakodiranoBesedilo+=matrika[0][st2];
					break;
				}
			}
		}
	}

	stevec=zakodiranoBesedilo.length();
	
	char tabela[1000][1000];
	int vrstice[1000];
	for(int st=0; st<dolzinaGesla; st++)
	{
		tabela[0][st]=geslo[st];
	}

	for(int st = 0; st < stevec; st++)
	{
		int st1 = (st / dolzinaGesla) + 1;
		vrstice[st % dolzinaGesla]=st1;
		tabela[st1][st % dolzinaGesla]=zakodiranoBesedilo[st];
	}
	
	int najvec=vrstice[0];
	for (int prehod = 0; prehod < dolzinaGesla-1 ; prehod++)
    {
		for(int i = 0; i < dolzinaGesla-1; i++)
		{
			
            if (int(tabela[0][i]) > int(tabela[0][i + 1]))
            {
				for(int st=0; st <=najvec; st++)
				{
				    char a = tabela[st][i];
				    tabela[st][i]=tabela[st][i+1];
				    tabela[st][i+1]=a;
				}

				int c=vrstice[i];
				vrstice[i]=vrstice[i+1];
				vrstice[i+1]=c;
            }
        }
    }

	stevec=0;
	for(int st=0; st < dolzinaGesla; st++)
	{
		for(int st1=1; st1<=vrstice[st];st1++)
		{
			zakodiranoBesedilo[stevec]=tabela[st1][st];
			stevec++;
		}
	}	
	
	int wslen = ::MultiByteToWideChar(CP_ACP, 0,
								zakodiranoBesedilo.data(), zakodiranoBesedilo.length(),
								NULL, 0);

    BSTR wsdata = ::SysAllocStringLen(NULL, wslen);
    ::MultiByteToWideChar(CP_ACP, 0,
		zakodiranoBesedilo.data(), zakodiranoBesedilo.length(),
                          wsdata, wslen);

	return wsdata;
}

amacar ::

Tole je že v c++.

Invictus ::

Pravzaprav je kar v C. Sam klice funkcij se zamenja, pa je ...
"Life is hard; it's even harder when you're stupid."

http://goo.gl/2YuS2x

Small_Hobit ::

V bistvu program deluje, ko je program.cs dodan kot dinamična knjižnica dll v drug projekt.

Najbolj pa me zmede zadnji del. Tole, če mi lahko kdo razloži bi mi veliko pomagalo.

int wslen = ::MultiByteToWideChar(CP_ACP, 0,
                                zakodiranoBesedilo.data(), zakodiranoBesedilo.length(),
                                NULL, 0);
 
    BSTR wsdata = ::SysAllocStringLen(NULL, wslen);
    ::MultiByteToWideChar(CP_ACP, 0,
        zakodiranoBesedilo.data(), zakodiranoBesedilo.length(),
                          wsdata, wslen);
 
    return wsdata;

keworkian ::

wslen je da dobiš dolžino stringa da lahko alociraš, potem pa nakonc pretvoriš iz multibyte v wc.
Obscenities in B-Flat

Small_Hobit ::

keworkian je izjavil:

wslen je da dobiš dolžino stringa da lahko alociraš, potem pa nakonc pretvoriš iz multibyte v wc.


Zakaj pa se tole potrebuje? A se lahko probem reši tudi brez tega?


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[C++] Brisanje znaka iz stringa

Oddelek: Programiranje
5985 (888) mm1992
»

branje iz datoteke c#

Oddelek: Programiranje
141648 (1377) darkolord
»

Branje binarne datoteke v polje znakov - C++

Oddelek: Programiranje
81801 (1669) Tutankhamun
»

Branje datoteke [C]

Oddelek: Programiranje
81124 (1053) Glodko
»

velike male besede c++

Oddelek: Programiranje
152584 (2200) PoPon2

Več podobnih tem