2012-04-12 12 views
0

I einen Client in C# gemacht, und ich möchte ein Server-Build unter Linux haben, in C.Linux kann keine ganze Zahl ist, kodiert von BitConverter.GetBytes read()

Ich verwende einen Präfix mit „-Nachricht "Länge für jede" Nachricht ". Ich kodiere es zu byte[] Array mit BitConverter.GetBytes() (4 Bytes Array). Danach schicke ich es von

socket.Send(prefix, prefix.Length, 0); 

Die C-Server auf Linux kann die Zahl nicht lesen. Es zeigt ein seltsames Zeichen, obwohl es 4 Bytes gelesen hat.

Linux-Seite sieht aus wie

char prefix[4]; 
int bytes = 0; 
bytes = recv(s, prefix, 4, 0); 
printf("%s", prefix); 

Wenn ich die Nummer kodieren von Encoding.UTF8.GetBytes() mit, Linux es richtig versteht.

Ich habe es getestet, und es sieht das Problem ist nur, wenn die Programme in diesen 2 verschiedenen Sprachen codiert sind.

Was ist los?

+0

Bitte den Empfangscode anzeigen. –

+1

Warum drucken Sie es als * string *? Es ist eine 4-Byte-codierte Ganzzahl - es ist kein Text. Sie sollten es * zurück * in eine 32-Bit-Ganzzahl konvertieren. –

+0

@JonSkeet Ich versuche 'int n = (int) Präfix;' und das Ergebnis ist 'segmentation fault'. – deem

Antwort

1
  • BitConverter.GetBytes() geben Ihnen einen binäre Darstellung - etwas, das in den meisten Fällen (versuchen, die int 0x20202020, dies sollte Ihnen ein oder mehrere Leerzeichen), aber perfekt für die Verarbeitung purpouses kein druckbares Zeichen ist. Sie können es mit etwas drucken wie printf("%d",the_int_variable)

  • Encoding.UTF8.GetBytes() werden Sie s String Darstellung geben - etwas, das für den Druck an die Konsole ist schön, aber nicht optimal für die Verarbeitung.

bearbeiten

Nach dem aktualisierten Frage, printf("%s", prefix);-printf("%d", prefix); ändern Präfix nach dem Ändern int und versuchen Sie es erneut eingeben.

+1

'Präfix' muss vom Typ 'int' gemacht werden, um' printf ("% d", Präfix); 'zu verwenden. Und hüte dich vor endianess ... – ydroneaud

+0

@ydroneaud natürlich hast du recht - danke. –

+0

@EugenRieck wie geht das? Ich versuche 'int n = (int) prefix;' und das Ergebnis ist 'segmentation fault'. – deem

Verwandte Themen