BinaryToHex



  • Hi!
    Ich hab folgendes Problem.
    Ich habe einen String gegeben in dem BinäreDaten stecken.
    Also keine {1,0} Folge sondern die seltsamen Zeichen *g*.
    Dies hätte ich gerne wie ein HexEditor es ausgibt als HexString.
    Ich benutze VisualStudio7 und schreibe in C++!

    Danke im Vorraus!



  • was für selsame Zeichen stecken denn da drin? base64? Buchstabe / Zahlengemisch / also letztlich Ascii-Zeichen oder wie sieht das aus?



  • ich denk base64!
    Die Funtktion sollte das gleich oder ähnliches tun wie die PHP-Funktion
    bin2hex
    Danke im Vorraus

    Als Hinweiß... wenn ich einen stantdart Hexeditor nehme und auf Hexadezimal anzeige gehe, dann sehe ich genau das was ich bräucht! 😋


  • Mod

    static inline TCHAR ByteToHex(int c)
    {
    	return static_cast<TCHAR>((c<10) ? (c)+_T('0') : (c)-10+_T('A'));		
    }
    
    void BinToString(PCVOID pData, PTSTR pszOut, int iLen)
    {
        int	iPos=0;
        const BYTE *pszStr = (const BYTE *)pData;
        while (iLen--) 
        {
       	BYTE byte = *pszStr++;
        	BYTE uByte = (byte & 0xF0) >> 4,
                  lByte = byte & 0xF;
    	pszOut[iPos++] = ByteToHex(uByte);
    	pszOut[iPos++] = ByteToHex(lByte);
        }
        pszOut[iPos] = '\0';
    }
    


  • Danke für den Code!
    Allerdings bringt der kompiler nur Fehler.
    Hab nun folgendes:

    static inline string ByteToHex(int c)
    {
        return static_cast<string>((c<10) ? (c)+_T('0') : (c)-10+_T('A'));       
    }
    
    void BinToString(unsigned char* pData, string* pszOut, int iLen)
    {
        int    iPos=0;
        const BYTE *pszStr = (const BYTE *)pData;
        while (iLen--)
        {
           BYTE byte = *pszStr++;
            BYTE uByte = (byte & 0xF0) >> 4,
                  lByte = byte & 0xF;
        pszOut[iPos++] = ByteToHex(uByte);
        pszOut[iPos++] = ByteToHex(lByte);
        }
        pszOut[iPos] = '\0';
    }
    

    wobei die Funktion ByteToHex den folgenden Fehler bringt:

    testLoggerObject.cpp(27) : error C3861: '_T': identifier not found, even with argument-dependent lookup
    testLoggerObject.cpp(27) : error C3861: '_T': identifier not found, even with argument-dependent lookup



  • Wenn du mit std::string arbeitest, benötigst du das _T()-Makro auch nicht wirklich 😉 Das dient dazu, eine Zeichenkonstante je nach Projekteinstellungen als ASCII oder UNICODE darzustellen.

    (und statt "string" solltest du eher "char" verwenden)



  • wenn ich nun

    static inline TCHAR ByteToHex(int c)
    {
        return static_cast<TCHAR>((c<10) ? (c)+_T('0') : (c)-10+_T('A'));       
    }
    
    void BinToString(unsigned char* pData, string* pszOut, int iLen)
    {
        int    iPos=0;
        const BYTE *pszStr = (const BYTE *)pData;
        while (iLen--)
        {
           BYTE byte = *pszStr++;
            BYTE uByte = (byte & 0xF0) >> 4,
                  lByte = byte & 0xF;
        pszOut[iPos++] = ByteToHex(uByte);
        pszOut[iPos++] = ByteToHex(lByte);
        }
        pszOut[iPos] = '\0';
    }
    

    schreibe bekomme ich die gleiche fehlermeldung.
    aber... wie sähe das mit char aus?

    Danke



  • static inline char ByteToHex(int c)
    {
        return static_cast<char>((c<10) ? (c)+'0' : (c)-10+'A');       
    }
    

Anmelden zum Antworten