Własny hex edytor w C++

tobix10

Użytkownik
Dołączył
Luty 25, 2009
Posty
65
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.
smile.gif


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;
}
 

tobix10

Użytkownik
Dołączył
Luty 25, 2009
Posty
65
Hehe, właśnie tak myślałem o tym, bo jak sprawdzałem wynik mojego wyjścia z Hxwork. To po dodaniu 256 do mojego wyniku wychodziło to samo co w Hxwork.
Nie byłem pewny czy tak można zrobić
<
.

A teraz inne pytanie. Jak dużymi porcjami mógłbym wczytywać bajty?
 

thc_flow

Zbanowany
Dołączył
Listopad 13, 2008
Posty
649
Bajty czy bity? Tutaj i tak masz dowolność. Ja naprzykład wczytuję bity w oktetach zawsze.
 

tobix10

Użytkownik
Dołączył
Luty 25, 2009
Posty
65
bajty
chyba wszystkie funkcje wczytują bajtami ?

Potrzebowałbym więcej informacji na ten temat a nic nie mogę znaleźć.
To ma być prosty hex edytor, więc jakie funkcje powinien posiadać oprócz podmiany wartości?
- zamiana hex na dec + widok ascii(tak jak w każdym)
- może wbudowany kalkulator hex->dec i na odwrót
- jakaś wyszukiwarka adresu i wartości

coś jeszcze ?
 
Do góry Bottom