000
09.12.2006, 18:54 Uhr
CppProgrammer
|
Hallo = ) Ich habe ein Problem mit der Übersetzung von Java Code in C++. Hab auch schon mehrere Versuche gestartet das irgendwie selber zum Laufen zu bringen, bin jedoch immer wieder gescheitert. Daher würde ich jemanden von euch bitten mir den Code eventuell in C++ umzuschreiben, bzw. meinen eigenen Versuch darin zu korrigieren. Das Ziel der Do() Funktion soll es sein, einen String (als Parameter) der aus 5 Zahlen besteht, die durch '#' getrennt sind, in einen anderen String umzuwandeln.
Hier mal der Java Code:
Code: |
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; }
private void Do(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 { util.out.writeBytes("~b#" + 13 + "#"); for(int i2 = 0; i2 < ac.length; i2++) util.out.write((byte)(ac[i2] & 0xff));
util.out.writeBytes("\n"); util.out.flush(); return; } catch(Exception exception) { // } }
|
Und jetzt mein Versuch das obige in C++ umzuschreiben:
C++: |
#include <windows.h> #include <iostream> #include<boost/tokenizer.hpp> #include<boost/dynamic_bitset.hpp>
using namespace std; using namespace boost;
dynamic_bitset<> a(dynamic_bitset<> bitset) { dynamic_bitset<> bitset1(64); bool flag = false; for(int i1 = 0; i1 < 64; i1++) { if(flag != bitset.test(i1)) bitset1.set(i1); flag = bitset.test(i1); } return bitset1; }
dynamic_bitset<> a(string ac) { int i1 = ac.length() * 8; dynamic_bitset<> 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; }
string a(dynamic_bitset<> bitset, int i1) { int j1 = i1 * 8; string ac; for(int k1 = 0; k1 < j1; k1++) { int l1 = k1 & 7; int i2 = k1 >> 3; if(bitset.test(k1)) ac[i2] = (char)(ac[i2] | 1 << 7 - l1); } return ac; }
void Do(string s1) { bool flag = false; string as[] = { "MNfw9809", "90981qFS", "412.Fdq.", "..13fS4.", "41!!vs%&" }; //StringTokenizer stringtokenizer = new StringTokenizer(s1 + "#", "#"); dynamic_bitset<> bitset(64); for(int i1 = 0; i1 < 5; i1++) { char* c; strcpy(c, s1.c_str()); if(i1 == 0) c = strtok(c, "#"); else c = strtok(NULL, "#");
dynamic_bitset<> bitset1 = a(as[i1]); int j1 = atoi(c); for(int l1 = 0; l1 < j1; l1++) bitset1 = a(bitset1);
bitset ^= bitset1; }
string 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 //{ cout << "~b#13#"; for(int i2 = 0; i2 < ac.length(); i2++) cout << ((byte)(ac[i2] & 0xff)); cout << ("\n"); //out.flush(); //return; //} //catch(Exception exception) //{ // exception.printStackTrace(); //} }
int main() { Do("23#57#26#50#48#"); return 0; }
|
Beispiele:
Code: |
Parameter: Ausgabe: 23#57#26#50#48# ~b#13#{....|÷# 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
|
Mein Code lässt sich soweit zwar kompilieren, bei der Ausführung jedoch funktioniert es so gut wie garnicht. Ich wäre sehr dankbar wenn sich jemand bereit erklären würde mir damit weiterzuhelfen. Dieser Post wurde am 09.12.2006 um 19:10 Uhr von CppProgrammer editiert. |