Java -> C++



  • Guten Abend :xmas1:
    Ich habe ein Problem das sich mir in der Form von JAVA Code stellt.
    Ich bräuchte nämlich folgenden Code in C++ umgeschrieben. Leider kenn ich mich mit Java nicht besonders gut aus was mir das natürlich erheblich erschwert. Besonders mit den bitsets und tokens hatte ich Probleme. Daher wollte ich jetzt einfach mal hier fragen ob sich von euch vielleicht jemand ziemlich gut mit Java UND C++ auskennt und mir diesen Code hier eventuell mal schnell umschreiben könnte.
    Vielen Dank schon mal für eure Bemühungen! 🙂

    private void DoThis(String s1)
    {
    	boolean flag = false;
    	String as[] = { "MNfw9809", "90981qFS", "412.Fdq.", "..13fS4.", "41!!vs%&" };
    	StringTokenizer stringtokenizer = new StringTokenizer(s1 + "#", "#");
    	BitSet bitset = new BitSet(64);
    	for(int i1 = 0; i1 < 5; i1++)
    	{
    		BitSet bitset1 = a(as[i1].toCharArray());
    		int j1 = Integer.parseInt(stringtokenizer.nextToken());
    		for(int l1 = 0; l1 < j1; l1++)
    			bitset1 = a(bitset1);
    
    		bitset.xor(bitset1);
    	}
    
    	char ac[] = a(bitset, 8);
    	for(int k1 = 0; k1 < 8; k1++)
    	if(ac[k1] == 0 || ac[k1] == '\n' || ac[k1] == '\r')
    		ac[k1] = (char)(ac[k1] | 0x80);
    
    	try
    	{
    		send("~b#" + 13 + "#");
    		for(int i2 = 0; i2 < ac.length; i2++)
    			out.write((byte)(ac[i2] & 0xff));
    		send("\n");
    		out.flush();
    		return;
    	}
    	catch(Exception exception)
    	{
    		exception.printStackTrace();
    	}
    }
    
    private BitSet a(BitSet bitset)
    {
    	BitSet bitset1 = new BitSet(64);
    	boolean flag = false;
    	for(int i1 = 0; i1 < 64; i1++)
    	{
    		if(flag != bitset.get(i1))
    			bitset1.set(i1);
    		flag = bitset.get(i1);
    	}
    
    	return bitset1;
    }
    
    private BitSet a(char ac[])
    {
        int i1 = ac.length * 8;
        BitSet bitset = new BitSet(i1);
        for(int j1 = 0; j1 < i1; j1++)
        {
            int k1 = j1 & 7;
            int l1 = j1 >> 3;
            if((ac[l1] & 0xff & 1 << 7 - k1) != 0)
                bitset.set(j1);
        }
    
        return bitset;
    }
    
    private char[] a(BitSet bitset, int i1)
    {
        int j1 = i1 * 8;
        char ac[] = new char[i1];
        for(int k1 = 0; k1 < j1; k1++)
        {
            int l1 = k1 & 7;
            int i2 = k1 >> 3;
            if(bitset.get(k1))
                ac[i2] = (char)(ac[i2] | 1 << 7 - l1);
        }
    
        return ac;
    }
    




  • Danke sehr finix!
    Jetzt bin ich der Sache schon etwas näher gekommen.
    Zumindest hab ich jetzt mal nen C++ Code der sich auch kompilieren lässt.
    Dieser tut jedoch noch nicht, was er eigentlich tun sollte (also genau das was der Java Code macht).
    Es wäre sehr nett wenn jemand den Code korrigieren könnte, da ich jetzt so ziemlich am Ende bin und einfach nicht mehr weiter komme :(.
    Ich schätze mal die Fehler liegen irgendwo bei den bitsets 😕. Die Kommentare stellen den orginal Java Code der an dieser Stelle war dar.

    #include <windows.h>
    #include <iostream>
    #include <bitset>
    using namespace std;
    
    bitset<64> a(bitset<64> bitset0) //private BitSet a(BitSet bitset)
    {
    	bitset<64> bitset1; //BitSet bitset1 = new BitSet(64);
    	bool flag = false; //boolean flag = false;
    	for(int i1 = 0; i1 < 64; i1++)
    	{
    		if(flag != bitset0.at(i1)) //if(flag != bitset.get(i1))
    			bitset1.set(i1);
    		flag = bitset0.at(i1); //flag = bitset.get(i1);
    	}
    	return bitset1;
    }
    
    bitset<64> a(char ac[]) //private BitSet a(char ac[])
    {
    	int i1 = strlen(ac) * 8;
    	bitset<sizeof(ac) * 8 *2> bitset0; //BitSet bitset = new BitSet(i1);
    	for(int j1 = 0; j1 < i1; j1++)
    	{
    		int k1 = j1 & 7;
    		int l1 = j1 >> 3;
    		if((ac[l1] & 0xff & 1 << 7 - k1) != 0)
    			 bitset0.set(j1);
    	}
    	return bitset0;
    }
    
    char* a(bitset<64> bitset0, int i1) //private char[] a(BitSet bitset, int i1)
    {
    	int j1 = i1 * 8;
    	char* ac = new char[i1]; //char ac[] = new char[i1];
    	for(int k1 = 0; k1 < j1; k1++)
    	{
    		int l1 = k1 & 7;
    		int i2 = k1 >> 3;
    		if(bitset0.at(k1)) //if(bitset.get(k1))
    			ac[i2] = (char)(ac[i2] | 1 << 7 - l1);
    	}
    	return ac;
    }
    
    char* DoThis(char* s1) //private void DoThis(String s1)
    {
    	bool flag = false; //boolean flag = false;
    	char* as[] = { "MNfw9809", "90981qFS", "412.Fdq.", "..13fS4.", "41!!vs%&" }; //String as[] = ...
    	//StringTokenizer stringtokenizer = new StringTokenizer(s1 + "#", "#");
    	bitset<64> bitset0; //BitSet bitset = new BitSet(64); 
    	for(int i1 = 0; i1 < 5; i1++)
    	{
    		bitset<64> bitset1 = a(as[i1]); //BitSet bitset1 = a(as[i1].toCharArray());
    		int j1 = atoi(strtok(s1, "#")); //int j1 = Integer.parseInt(stringtokenizer.nextToken());
    		for(int l1 = 0; l1 < j1; l1++)
    			bitset1 = a(bitset1);
    		bitset0 ^= bitset1; //bitset.xor(bitset1);
    	}
    	char* ac = a(bitset0, 8); //char ac[] = a(bitset, 8);
    	for(int k1 = 0; k1 < 8; k1++)
    		if(ac[k1] == 0 || ac[k1] == '\n' || ac[k1] == '\r')
    			ac[k1] = (char)(ac[k1] | 0x80);
    
    	char* RE = "~b#13#"; //send("~b#" + 13 + "#");
    	for(int i2 = 0; i2 < strlen(ac); i2++)
    		RE += (byte)(ac[i2] & 0xff); //out.write((byte)(ac[i2] & 0xff)); 
    	RE += '\n'; //send("\n");
    	//out.flush();
    	return RE;
    }
    
    int main(int argc, char* argv[])
    {
    	cout << DoThis("23#57#26#50#48#");
    	// Sollte jetzt theoretisch "~b#13#{....|÷#" ausgeben
    
    	/* 
    		Ansonsten hab ich noch folgende Beispiele:
    		35#57#33#33#50#     ~b#13#z³zÔ.µÙ.
    		56#25#59#26#24#     ~b#13#\..é8B)D
    		49#47#53#44#43#     ~b#13#`dC.±Ž.S
    		So sollten dann normalerweise die Rückgabewerte von DoThis(...) bei den jeweiligen Parametern aussehen
    	*/
    
    	return 0;
    }
    

Log in to reply