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
