von C++ nach C#: memcpy,strcpy usw.

06/08/2009 - 10:47 von Susan Bachmann | Report spam
Hallo,

ich steige um von C++ nach C# und bin (zugegeben) noch ziemlich am
Lernen. Ich muß etwas weiter ausholen für meine Frage:

Also, ich muss Netzwerkfunktionen in mein C# Programm reinpacken.
(Das Handling der Netzwerkseite ist klar.)

Was mir nicht gelàufig ist, ist wie man die Datenpakete zusammenbastelt
(in C++ ist das alles kein Problem).

In C++ habe ich eine struct, die ungefàhr so aussieht:

typedef struct TCP_DECODED_PACKET_ {
DWORD m_dwLen;
char m_chName[128];
char m_chFunktion[128];
char m_chTypflag;
char m_chSubfunktion[128];
} TCP_DECODED_PACKET;

Das ist ein "entpacktes" Paket. Die einzelnen Felder sind
NUL-terminiert. Wenn die Daten verschickt werden, werden sie zunàchst in
ein Byte-Array kopiert, danach die Gesamtlànge ermittelt und versendet.
Beim Empfangen geht es den umgekehrten Weg.

Ein Paket könnte z.B. so versendet werden (Hex):


0E 00 00 00 'M' 'A' 'X' 00 'F' 'M' 00 02 00 00

Lànge : 14 Bytes
Name : 'MAX'
Funktion : 'FM'
TypFlag : 02
SubFunc : 00

Am Ende steht ein zusàtzliches NullByte.

In C++ beutze ich in einer Pack-Routine eben einfach Pointer-casting und
u.a. memcpy/strcat/strlen, eben die bekannten Funktionen.

Aber: wie macht man so etwas in C#?

Von string nach byte[] geht z.B. mit Encoding
byte[] str = Encoding.UTF8.GetBytes(postData)

Könnte mir jemand einen Tipp geben, wie man das macht oder wo man
nachlesen kann, wie es geht?

Vielen Dank im voraus!!!
 

Lesen sie die antworten

#1 AyrA
06/08/2009 - 11:12 | Warnen spam
Susan Bachmann wrote in
news::

Hallo,

ich steige um von C++ nach C# und bin (zugegeben) noch ziemlich am
Lernen. Ich muß etwas weiter ausholen für meine Frage:

Also, ich muss Netzwerkfunktionen in mein C# Programm reinpacken.
(Das Handling der Netzwerkseite ist klar.)

Was mir nicht gelàufig ist, ist wie man die Datenpakete
zusammenbastelt (in C++ ist das alles kein Problem).

In C++ habe ich eine struct, die ungefàhr so aussieht:

typedef struct TCP_DECODED_PACKET_ {
DWORD m_dwLen;
char m_chName[128];
char m_chFunktion[128];
char m_chTypflag;
char m_chSubfunktion[128];
} TCP_DECODED_PACKET;

Das ist ein "entpacktes" Paket. Die einzelnen Felder sind
NUL-terminiert. Wenn die Daten verschickt werden, werden sie zunàchst
in ein Byte-Array kopiert, danach die Gesamtlànge ermittelt und
versendet. Beim Empfangen geht es den umgekehrten Weg.

Ein Paket könnte z.B. so versendet werden (Hex):


0E 00 00 00 'M' 'A' 'X' 00 'F' 'M' 00 02 00 00

Lànge : 14 Bytes
Name : 'MAX'
Funktion : 'FM'
TypFlag : 02
SubFunc : 00

Am Ende steht ein zusàtzliches NullByte.

In C++ beutze ich in einer Pack-Routine eben einfach Pointer-casting
und u.a. memcpy/strcat/strlen, eben die bekannten Funktionen.

Aber: wie macht man so etwas in C#?

Von string nach byte[] geht z.B. mit Encoding
byte[] str = Encoding.UTF8.GetBytes(postData)

Könnte mir jemand einen Tipp geben, wie man das macht oder wo man
nachlesen kann, wie es geht?

Vielen Dank im voraus!!!





Soweit mir bekannt ist, kannst du mit System.Net.Sockets.TcpClient eine
TCP Verbindung aufbauen (oder auf eine warten) und dann Pakete senden,
oder empfangen. Zum senden kann man das fertige Byte array übergeben.
die lànge erhàllst du mit arrayname.Length strcat brauchst du in
C#nicht, da es ja strings als Datentyp gibt. du kannst einfach mit
stringname+="Zeichen" etwas an einen string anhàngen. mit
stringName.toCharArray() kannst du es in ein char[] umwandeln. memcpy
gibt es soweit ich weiss in c# nicht. Eine google suche nach "memcpy c#"
wird dir sicher weiterhelfen

Ähnliche fragen