Avatar billede bjering Nybegynder
22. februar 2007 - 22:33 Der er 1 kommentar og
1 løsning

convertere lidt c++ til c#

Hejsa Eksperter :)

Endnu engang har jeg brug for jeres hjælp, denne gang med at konvertere lidt c++ code til c#.

Jeg har selv lavet en del, lidt mangler dog.

her er koden i C++

void Logger::PacketLog(const unsigned char *buf, int len)
{
    if( Myfile.is_open() )
    {
        char logstring[LogLength];
        char tmp[32]; char print[17];
        print[16] = 0; int offset;
        for (offset = 0; offset < len;) {
            _snprintf(logstring, LogLength, "[  DATA  ] (0x%.4X) ", int(offset/16)*16);
            int loffset;
            for (loffset = 0; (loffset < 16) && (offset < len); loffset++) {
                _snprintf(tmp, 32, " %.2X", buf[offset]);
                if (isprint(buf[offset]))
                    print[loffset] = buf[offset];
                else
                    print[loffset] = '.';
                StrCat(logstring, tmp);
                offset++;
            }
            for (; loffset < 16; loffset++) {
                    StrCat(logstring, "  ");
                    print[loffset] = 0;
            }
            StrCat(logstring, "  ");
            StrCat(logstring, print);
            StrCat(logstring, "\n");

            Myfile.write( logstring, strlen(logstring) );
        }
    }
}

og den laver sådan her i fil

[  DATA  ] (0x0000)  2A 01 47 23 01 00 00 31 F8 C6 1B 00 00 FF FF FF  *.G#...1........
[  DATA  ] (0x0010)  FF 0F 0F 0F 00 FF FF FF FF FF FF 00 00 00 00 4C  ...............L

og jeg har dette kode i c#

        public static void LogHex(byte[] bytes, int lenght)
        {                                             
            int offset;
            for (offset = 0; offset < bytes.Length; )
            {
                System.Text.StringBuilder sb = new System.Text.StringBuilder();
                System.Text.StringBuilder db = new System.Text.StringBuilder();               

                int locactionint = (offset / 16) * 16;
                string location = locactionint.ToString("X4");
                sb.Append( "[  DATA  ] (0x"+location+") ");

                int loffset;
                for (loffset = 0; (loffset < 16) && (offset < bytes.Length); loffset++)
                {
                    sb.Append(" " + bytes[offset].ToString("X2"));
                    db.Append(bytes[loffset].ToString());
                    offset++;
                }
                for (; loffset < 16; loffset++)
                {
                    sb.Append("  ");
                    db.Append(" ");
                }
                sb.Append("  ");
                sb.Append(db);
                sb.Append("\n");

                Log(false, sb.ToString());
                sb = new System.Text.StringBuilder();
                db = new System.Text.StringBuilder();
            }           
        }

og den lavet dette

[  DATA  ] (0x0000)  12 00 26 70 32 8D 2E BF 6C E5 29 00 D9 BC FB 5B  18038112501414619110822941021718825191

[  DATA  ] (0x0010)  82 21                                            180             

som i nok kan se er det ikke helt optimalt, nogen der kan fikse det sidste der mangler ?

jeg kender ikke lige kommandoerne der mangler i c#

den nederste skulle gerne blive som den øverste :)

Takker
Avatar billede bjering Nybegynder
22. februar 2007 - 23:38 #1
okay, jeg har det næsten til at virke nu, men mangler en måde at tjekke om en byte er en ascii (altså abcde123 osv) streng eller ikke, og hvis ikke skrive . istedet for byten
Avatar billede bjering Nybegynder
23. februar 2007 - 00:19 #2
har selv fundet svaret, sorry :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester