hex->ascii ich verzweifel :(
-
hallo
Ich will (immernoch) ein Programm schreiben, welches per Kommandozeile angesteuert wird.
Wenn ich es mit den Kommandozeilen "c:\test.txt c:\fertig.exe ascii" ansteuer soll es einen (sehr langen) hex-string in dieser Form "0CFF74048944240C33C08BCBE85B1DFEFF83780804756E33C08" aus der Datei "c:\test.txt" auslesen und dann eine datei "c:\fertig.exe" erstellen die den ascii-string enthält.
Anders herum soll eine Kommandozeile in dieser Form "c:\fertig.exe c:\test.txt hex" die datei "c:\fertig.exe" in hexadezimaler Form in "c:\test.txt" schreiben.
das sind meine Versuche bis jetzt:
#include <stdio.h> #include <stdlib.h> #include <fstream> #include <iostream> #include <string> using namespace std; char hta(char first, char second) { char hex[5], *stop; hex[0] = '0'; hex[1] = 'x'; hex[2] = first; hex[3] = second; hex[4] = 0; return strtol(hex, &stop, 16); } int main() { ifstream handle; handle.open("c:\\test.txt",ios::in); string s; getline(handle,s,' '); handle.close(); char a; char b; string out; out = ""; while (s != "") { a = s.substr(0,1); b = s.substr(1,2); out = out + hta(a,b); s.erase(0,2); } cout<<out; cin >>s; }ich bin mit meinem latein (oder besser c++^^) am ende

könnte mir jemand geschwind ein Beispiel schreiben?
gute nacht

iamstupid
edit: hab ich meinen Beitrag ins falsche Forum gesetzt wenn ich mit visual c++ programmiere?
-
iamstupid schrieb:
hab ich meinen Beitrag ins falsche Forum gesetzt wenn ich mit visual c++ programmiere?
Ne, hat ja nix mit der IDE zu tun

Eine Verständnisfrage, soll so umgewandelt werden?:
Hallo
->
0x480x610x6C0x6C0x6F
?Jedenfalls glaube ich nicht, dass du Zeichen richtig verstehst. Ein Zeichen ist im ASCII-Code ein einzelnes Byte, bestehend aus 8 Bit. Eine Hexadezimalzahl, die das repräsentiert, besteht aus 2 Zeichen, jeweils 0 bis F. Ein kleines 'a' hat laut ASCII-Tabelle den Wert 97, hexadezimal 0x61. Wenn du das Zeichen nun in einer char-Variable hast (oder unsigned-char), sind die oberen 4 Bit eine Zahl zwischen 0 und 15, die unteren 4 Bit ebenfalls. Und diese musst du wiederum in ein ASCII-Zeichen zwischen '0' und 'F' umwandeln (das Ergebnis soll ja auch wieder Text sein).
Also hast du ein char x. Die oberen 4 Bit bekommst du mit x>>4, die unteren mit x&0x0F. Um dann die zwei Zahlen zwischen 0 und 15 wieder in ASCII-Code umzuwandeln, kannst du folgende Tabelle benutzen: char[] resulting_ascii = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; Deine zwei Zahlen nimmst du jeweils als Index für die Tabelle, dann hast du's
-
du kanst eine einzelnes Zeichen char a; als hexstring in ein string/iostream speichern mit "%x" !!
char c='A'; char buf[5]; sprintf(buf,"%x",c);nun hast du in buf den hexwert von A!!!
Das war C, in C++ kann man das sicher mit der STL machen;)
-
hi
ich will zb diese Datei : http://inetget.in.funpic.de/text.txt in eine exe umwandeln die den systempiepser piepsen lässt.
also jeweils 2 zeichen in einen ascii wert von 0-255 umwandeln und eintragen...
das geht doch oder hab ich da was falsch verstanden?...
verzweifelnde grüße
iamstupid
-
Und woran scheitert es jetzt genau? Du nimmst dir je zwei Zeichen der Eingabe und liest die als Hex-Zahl aus - soweit ich das überblicke, macht deine Funktion hta sogar das, was du erwartest.
-
jo schon...
Aber irgendwie kommt da immer ein Fehler.
Und ich hab auch noch keine Idee wie ich das Zeichen dann in eine Datei schreiben soll:(
mfg

-
"Aber da kommt immer ein Fehler"
Und wie sollen wir dir dabei helfen, ohne zu wissen wie dein Code aussieht, und was es für ein Fehler ist?
Du solltest wenigstens deine Versuche mal zeigen...
-
hät ich mir denken können^^
.\main.cpp(32) : error C2440: '=': 'std::basic_string<_Elem,_Traits,_Ax>' kann nicht in 'char' konvertiert werden
with
[
_Elem=char,
_Traits=std::char_traits<char>,
_Ax=std::allocator<char>
]
Kein benutzerdefinierter Konvertierungsoperator verfügbar, der diese Konvertierung durchführen kann, oder der Operator kann nicht aufgerufen werden
.\main.cpp(33) : error C2440: '=': 'std::basic_string<_Elem,_Traits,_Ax>' kann nicht in 'char' konvertiert werden
with
[
_Elem=char,
_Traits=std::char_traits<char>,
_Ax=std::allocator<char>
]ich kann zwar das wirwar lesen aber verstehen tuh ich es nciht

danke für eure gedult

-
So wie ich die Fehlermeldung interpretiere schreibst du ja in Zeile 32:
b = s.substr(1,2);
Für dich ist das Klar, das zwischen 1 und 2 nur ein Zeichen liegt, deshalb hast du b ja auch als char definiert.
Das weiß aber der Compiler nicht und die Funktion substr() gibt für ihn einen String zurück, den er nicht in ein char konvertieren kann.Ich hab das zwar nie gemacht, aber wie wärs wenn du es so versuchst:
char buffer[256]; oder char* buffer //weiß nicht genau welches funktioniert char b; s.copy(buffer, 1 ,0); b = buffer[0];Vielleciht gehts ja

Viele Grüße
Andreas
-
Ohje.

Erstens: string::substr( position, length )
Zweitens: char b = s[0] wäre zu einfach?
-
ok thx es funktioniert

aber ich habe eine Auslastung von 100% -.- wie kann ich die herutersetzen ohne auf viel geschwindigheit zu verzichten?