2

C#で最初にエンコードされたバイト配列からintを変換する際に問題が発生しました。Javaはスモールではなくビッグエンディアンで動作するため、最初にビッグエンディアンに変換します。次のコードは、をバイトにエンコードします

    Console.WriteLine("A new data client has connected!");
    byte[] welcomeMessage = ASCIIEncoding.ASCII.GetBytes("Welcome young chap! Please let me know about anything you need!");

    welcomeMessage = Byte.add(BitConverter.GetBytes(System.Net.IPAddress.HostToNetworkOrder(20)), welcomeMessage);

Byte.addは、2つの配列を一緒に追加します。これは、C#からC#の間で使用したために機能します。ウェルカムメッセージには、最初にヘッダーバイトがロードされ、クライアントに情報が何であるかが通知されます。デコードしようとすると、Java側で奇妙な値が表示されます。デコードまたはエンコードが不適切かどうかわかりません。Java側はそのようなものです。これはAndroidデバイスで実行されています:

   if (ByteBuffer.wrap(buffer).getInt() == 20)
   {
          latestMessage = new String(buffer); 
   }
   latestMessage = String.valueOf(ByteBuffer.wrap(buffer).getInt(0)); //Lets me see what value this is. Cant attach debugger for some reason ATM.
4

2 に答える 2

3

ByteBufferは、メソッドを使用してマルチバイト値をビッグエンディアンまたはリトルエンディアンとしてデコードするように構成できますorder()

例えば:

final ByteBuffer bb = ByteBuffer.wrap(buffer);
bb.order(ByteOrder.LITTLE_ENDIAN);

final int i = bb.getInt();
...
于 2012-04-15T05:39:44.727 に答える
0

たぶん、BitConverterクラスが役に立ちます。こちらをご覧ください。

于 2012-04-15T05:34:11.630 に答える