c++ UND c# profis hier? Brauche Übersetzung...
Hi@All,
Gibt es hier c++ und c# Profis?
Ich bräuchte mal folgenden Code Abschnitt übersetzt (am allerbesten mit erklärung):
Sollte noch Code unklar sein, ich habe nur die wichtigsten abschnitte aus dem original Source genommen.
//Edit: So, hab mal den ganzen source reinkopiert. Ich weiß was das Tool macht (also hauptsächlich eine Datei Bitweise mit xor #8d bearbeiten und um diefe fuktion gehts mir hauptsächlich).
Also ich arbeite mit MS C# Express 2008 und wollte die Funktion eigentlich in eine Windows Form mit einbauen. Also es soll nicht Konsole sein.
Vielen vielen dank!
MisterShark
Gibt es hier c++ und c# Profis?
Ich bräuchte mal folgenden Code Abschnitt übersetzt (am allerbesten mit erklärung):
|
|
Quellcode |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 |
#include <cstdlib>
#include <cstdio>
#include <cerrno>
#include <fstream>
#include <sstream>
#include <string>
#include <iterator>
#include <algorithm>
#include "md5.hpp"
using namespace std;
string read(const string & name);
size_t write(const string & blob, const string & name);
size_t backup(const string & name);
string encode(const string & blob);
string decode(const string & blob);
string md5sum(const string & blob);
size_t replace(string & blob, const string & what, const string & with);
struct xor8d { char operator()(char c) { return c ^ 0x8d; } };
int main(int argc, char * argv[])
{
if (argc < 4) { fprintf(stderr, "\n\tI miss some input, dude!\n"); return 1; }
try
{
if (strcmp(argv[1], "-d") == 0)
{
//
// just decrypt a file
//
if (strcmp(argv[2], argv[3]) == 0) throw exception("input and output file is the same");
string in = read(argv[2]);
string out = decode(in);
backup(argv[3]);
write(out, argv[3]);
}
else
{
//
// mod room's data
//
// get md5 digest of destination file
string orig = read(argv[2]);
string d1 = md5sum(orig);
// overwrite destination file with new one
string in = read(argv[3]);
string out = encode(in);
backup(argv[2]);
write(out, argv[2]);
// get md5 digest of new file
string d2 = md5sum(out);
// replace old md5 digest with new in fileinfo
string path = argv[1];
path = path.substr(0, path.find_last_of("\\/") + 1);
string fi1name = path + "./fileinfo2.dat";
string fi2name = path + "./fileinfo2r.dat";
string fi1 = read(fi1name);
string fi2 = read(fi2name);
string x1;
string x2;
transform(d1.begin(), d1.end(), back_inserter(x1), xor8d());
transform(d2.begin(), d2.end(), back_inserter(x2), xor8d());
replace(fi1, x1, x2);
replace(fi2, x1, x2);
backup(fi1name);
backup(fi2name);
write(fi1, fi1name);
write(fi2, fi2name);
}
}
catch (exception e)
{
fprintf(stderr, "\n\tError: %s\n", e.what());
return 2;
}
return 0;
}
string read(const string & name)
{
ifstream is(name.c_str(), ios_base::binary);
if (is.fail()) throw exception("can't open input file");
string s;
copy(istreambuf_iterator<char>(is), istreambuf_iterator<char>(), back_inserter(s));
return s;
}
size_t write(const string & blob, const string & name)
{
ofstream os(name.c_str(), ios_base::binary | ios_base::trunc);
if (os.bad()) throw new exception("can't create output file");
copy(blob.begin(), blob.end(), ostreambuf_iterator<char>(os));
return 1;
}
size_t backup(const string & name)
{
if (rename(name.c_str(), (name + ".bak").c_str()) == 0)
{
return 0;
}
else
{
errno_t err;
_get_errno(&err);
return err;
}
}
// encoding
string encode(const string & blob)
{
char prefix[] = { 0x43, 0x46, 0x31, 0x30, 0x00 };
string s(prefix);
transform(blob.begin(), blob.end(), back_inserter(s), xor8d());
return s;
}
string decode(const string & blob)
{
if (blob.size() < 4) throw exception("invalid input");
string s;
transform(blob.begin() + 4, blob.end(), back_inserter(s), xor8d());
return s;
}
string md5sum(const string & blob)
{
md5_state_t st;
MD5::init(&st);
MD5::append(&st, (const md5_byte_t *)&blob[0], (unsigned int)blob.size());
md5_byte_t dig[17] = {0};
MD5::finish(&st, dig);
return string((char *)dig, 16);
}
size_t replace(string & blob, const string & what, const string & with)
{
size_t c = 0;
size_t n = 0;
while (true)
{
n = blob.find(what, n);
if (n == string::npos) break;
blob.replace(n, with.size(), with);
c++;
n += with.size();
}
return c;
}
|
Sollte noch Code unklar sein, ich habe nur die wichtigsten abschnitte aus dem original Source genommen.
//Edit: So, hab mal den ganzen source reinkopiert. Ich weiß was das Tool macht (also hauptsächlich eine Datei Bitweise mit xor #8d bearbeiten und um diefe fuktion gehts mir hauptsächlich).
Also ich arbeite mit MS C# Express 2008 und wollte die Funktion eigentlich in eine Windows Form mit einbauen. Also es soll nicht Konsole sein.
Vielen vielen dank!
MisterShark
Risikofrei mit bis zu $50+$100 kostenlosem Startkapital eine Pokerkarriere starten bei PokerStrategy.com
Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »MisteRSharK« (4. März 2009, 13:02)
hi viele sachen kann man nicht übersetzen weil du nur die void main() hier gepostet hast. und da werden hauptsächlich strings durch funktionen gejagt und ausgegeben oder in eine datei geschrieben. wir brauchen schon den kompletten quellcode(wobei ich ehrlich gesagt nicht genau weis ob bei c# der startparameter argv exestiert), denn wenn nicht dann kann man den code eigentlich nicht übersetzen
MFG
MFG
Mein kleines Projekt
-Cruel Online-
-Cruel Online-
So, hab mal den ganzen Code mal rangehängt
Risikofrei mit bis zu $50+$100 kostenlosem Startkapital eine Pokerkarriere starten bei PokerStrategy.com
Hallo!
Ich weis jetzt nicht ganz genau was du genau haben willst, aber das ist kein C# Code.
Bei C# werden Bibliotheken mit "using ..." eingebunden.
Ich denke einmal das es C, oder C++ ist.
Und ich hab echt keinen Plan was das für ein Code sein sollte.
Mit ein paar mehr Infos von dir wäre und besser geholfen, eventuell woher du den Code hast etc.
Grüße
Ich weis jetzt nicht ganz genau was du genau haben willst, aber das ist kein C# Code.
Bei C# werden Bibliotheken mit "using ..." eingebunden.
Ich denke einmal das es C, oder C++ ist.
Und ich hab echt keinen Plan was das für ein Code sein sollte.
Mit ein paar mehr Infos von dir wäre und besser geholfen, eventuell woher du den Code hast etc.
Grüße
Sry... Ist C++ und soll nach C# übersetzt werden.
Das Programm nimmt jpeg Dateien und mach folgendes:
So wie ich das verstehe wird vor die jpeg an sich die Hexwerte 0x43, 0x46, 0x31, und 0x30 nachdem die Datei byte für byte mit xor 0x8D verarbeitet wird.
Anschaulich:
Sooo... Nun kann ich aber leider nichts mit transform, blob und ähnliches anfangen, da ich soweit nicht mit C/C++ vertraut bin.
Ich hoffe ihr könnt mir weiter helfen, zumindest dieses eine Stück, denn dann werde ich den Rest auch alleine schaffen.
MisterShark
Das Programm nimmt jpeg Dateien und mach folgendes:
|
|
Quellcode |
1 2 3 4 5 6 7 |
char prefix[] = { 0x43, 0x46, 0x31, 0x30, 0x00 };
string s(prefix);
transform(blob.begin(), blob.end(), back_inserter(s), xor8d());
return s;
|
So wie ich das verstehe wird vor die jpeg an sich die Hexwerte 0x43, 0x46, 0x31, und 0x30 nachdem die Datei byte für byte mit xor 0x8D verarbeitet wird.
Anschaulich:
|
|
Quellcode |
1 2 3 4 5 |
XOR xxxx xxxx xxxx xxxx xxxx xxxx 72 - 0111 0010 | 55 - 0101 0101 | 72 - 0111 0010 8D - 1000 1101 | 8D - 1000 1101 | 8D - 1000 1101 ============================================= FF - 1111 1111 | D8 - 1101 1000 | FF - 1111 1111 |
Sooo... Nun kann ich aber leider nichts mit transform, blob und ähnliches anfangen, da ich soweit nicht mit C/C++ vertraut bin.
Ich hoffe ihr könnt mir weiter helfen, zumindest dieses eine Stück, denn dann werde ich den Rest auch alleine schaffen.
MisterShark
Risikofrei mit bis zu $50+$100 kostenlosem Startkapital eine Pokerkarriere starten bei PokerStrategy.com
C# ist es kein und C++ auch nicht.
Ist ganz normales C.
Auch falsch, es ist C++.
Warum packst du den ganzen C++ code nicht in eine DLL und nutzt diese aus C#?
Aktuell nutze ich: Windows, Linux, MacOS X, Solaris...weil die Welt nicht nur S/W ist!
Blog
Blog
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »silence« (5. März 2009, 01:38)
Dies habe ich auch in einem Expliziten C# Forum gefragt ob dies möglich wär (mycsharp.de: C++ Code als Bibiliothek in C# einbinden?).
Dort sagte man mir es wäre nicht möglich, wenn es nicht in nativen C geschrieben wäre.
Also wenn dies möglich wäre, wäre es natürlich super zu wissen wie
MisterShark
Dort sagte man mir es wäre nicht möglich, wenn es nicht in nativen C geschrieben wäre.
Also wenn dies möglich wäre, wäre es natürlich super zu wissen wie
MisterShark
Risikofrei mit bis zu $50+$100 kostenlosem Startkapital eine Pokerkarriere starten bei PokerStrategy.com
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »MisteRSharK« (5. März 2009, 11:51)
Jain - was die Leute im Forum wohl meinten ist, das dllexport mit C++ funktion/klassen/templates decorated function names erzeugt.
D.h. aus
wird in der export section nicht A sondern etwas in der Richtung: ?a@@YAHD@Z
Dann müsste man also entweder in C# statt den Funktionsnamen A einfach ?a@@YAHD@Z verwenden, oder die funktion mit extern "C" exportieren:
Wenn das ganze aber wirklich so funktioniert wie du beschrieben hast, ist es ganz einfach in C# zu lösen (ungetestet):
D.h. aus
|
|
Quellcode |
1 2 3 4 |
int __stdcall __declspec(dllexport) A()
{
//bla
}
|
Dann müsste man also entweder in C# statt den Funktionsnamen A einfach ?a@@YAHD@Z verwenden, oder die funktion mit extern "C" exportieren:
|
|
Quellcode |
1 2 3 4 5 6 7 |
extern "C"
{
int __stdcall __declspec(dllexport) A()
{
//bla
}
}
|
Wenn das ganze aber wirklich so funktioniert wie du beschrieben hast, ist es ganz einfach in C# zu lösen (ungetestet):
|
|
Quellcode |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
try
{
FileStream fStream = File.Open("MyFile.jpg", System.IO.FileMode.Open, System.IO.FileAccess.ReadWrite);
Int32 nCount = (Int32)fStream.Length;
byte[] ucBuffer = new byte[nCount];
fStream.Read(ucBuffer, 0, nCount);
for (int i = 0; i < fStream.Length; i++)
ucBuffer[i] ^= 0x8d;
fStream.Position = 0;
fStream.WriteByte(0x43);
fStream.WriteByte(0x46);
fStream.WriteByte(0x31);
fStream.Write(ucBuffer, 0, nCount);
fStream.Flush();
fStream.Close();
}
catch (Exception ex)
{
//TODO: Exception handling ;-)
}
|
Aktuell nutze ich: Windows, Linux, MacOS X, Solaris...weil die Welt nicht nur S/W ist!
Blog
Blog
Ähnliche Themen
-
Foren-, Blog- und Content-Managementsysteme »-
[sonstige] Deutsche Discuz! Übersetzung
(20. August 2008, 13:25)
-
Foren-, Blog- und Content-Managementsysteme »-
[WBB1.2] Forum übersetzen!
(3. April 2005, 10:52)
-
Allgemeines Forum »-
Harry Potter 6 übersetzen!
(19. September 2004, 15:07)
-
Bücher & Literatur »-
Herr der Ringe
(22. April 2003, 18:50)
-
Allgemeines Forum »-
Brauche Hilfe bei Übersetzung
(30. September 2002, 23:40)


