Siema jest to mój pierwszy post na tym forum.
Programuje już trochę w C++, ale nigdy nie pisałem programów tj. hex edytor. Chciałbym sobie takiego napisać może z wykorzystaniem wxWidgets, bo podoba mi się ta biblioteka.
Mam pytanie co do tego jak powinien funkcjonować taki hex edytor. Szukałem na różnych forach, ale jakoś nie znalazłem odpowiedzi na moje pytanie(tutaj nie działa mi wyszukiwarka
).
Na razie kombinuje sobie pod konsolą i chce dojść do tego, żeby samo wczytywanie było poprawne. Wczytuje sobie dane binarnie znak po znaku(efektywniej chyba byłoby wczytywać jakąś porcję danych, tylko nie wiem jaką dużą). Zrobiłem sobie funkcje konwertującą na postać szesnastkową, ale mam problem z ujemnymi wartościami. Jeżeli wczytane zostało -1 to zamieniam to na postać FF, ale już jak na przykład są takie wartości jak -72 to jak mam to wyświetlić ?
Zrobiłem jeszcze, że jak jest 0 to zamieniane zostaje na dwa zera, a jak wartość jest mniejsza od 16(przez co jej postać szesnastkowa to tylko 1 cyfra/litera) to zostaje ona poprzedzona zerem.
Dziękuje za wszystką pomoc.
Tak wygląda mój wstępny, testowy kodzik
.
Programuje już trochę w C++, ale nigdy nie pisałem programów tj. hex edytor. Chciałbym sobie takiego napisać może z wykorzystaniem wxWidgets, bo podoba mi się ta biblioteka.
Mam pytanie co do tego jak powinien funkcjonować taki hex edytor. Szukałem na różnych forach, ale jakoś nie znalazłem odpowiedzi na moje pytanie(tutaj nie działa mi wyszukiwarka
Na razie kombinuje sobie pod konsolą i chce dojść do tego, żeby samo wczytywanie było poprawne. Wczytuje sobie dane binarnie znak po znaku(efektywniej chyba byłoby wczytywać jakąś porcję danych, tylko nie wiem jaką dużą). Zrobiłem sobie funkcje konwertującą na postać szesnastkową, ale mam problem z ujemnymi wartościami. Jeżeli wczytane zostało -1 to zamieniam to na postać FF, ale już jak na przykład są takie wartości jak -72 to jak mam to wyświetlić ?
Zrobiłem jeszcze, że jak jest 0 to zamieniane zostaje na dwa zera, a jak wartość jest mniejsza od 16(przez co jej postać szesnastkowa to tylko 1 cyfra/litera) to zostaje ona poprzedzona zerem.
Dziękuje za wszystką pomoc.
Tak wygląda mój wstępny, testowy kodzik
Kod:
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
void ConvertToHex(int a, std::string & str)
{
static const char cTab[] = { 'A', 'B', 'C', 'D', 'E', 'F' };
if(a > 15)
ConvertToHex(a / 16, str);
std::ostringstream o;
int res = a % 16;
if(res > 9)
o << cTab[res - 9 - 1];
else
o << res;
str += o.str();
}
int main(int argc, char **argv)
{
std::ios::sync_with_stdio(0);
/*if(argc < 2)
return -1;*/
char cChar;
std::fstream file("C:\\CheatEngine55.exe"/*argv[1]*/, std::fstream::in | std::fstream::out | std::fstream::binary);
if(file.fail())
{
std::cerr << "Cannot open file\n";
return -1;
}
int iLength = 0;
file.seekg(0, std::ios::end);
iLength = file.tellg();
file.seekg(0, std::ios::beg);
std::cout << "Size of file: " << iLength << " bytes\n\n";
if(!file)
file.clear(file.rdstate() & ~(std::ios::failbit | std::ios::eofbit));
while(file.eof() != true)
{
cChar = file.get();
std::string strPut;
ConvertToHex(cChar, strPut);
if(strPut == "0")
strPut += '0';
if(strPut == "-1")
strPut = "FF";
if(strPut.length() == 1)
strPut.insert(0, "0");
std::cout.write(strPut.c_str(), strPut.length());
std::cout.put(' ');
}
std::cin.ignore();
std::cin.get();
return 0;
}