0

Java で符号なしバイトを実装する方法。サイズは 1 バイトのみに制限されている必要があります。つまり、0xFF で And'ing して short または int に変換することはできません。

受信側はサイズ 1 バイトのみの符号なしバイト配列を期待する C コード メソッドであるため、ソケットを介して符号なしバイト配列を転送する必要がありますが、Java は符号なしバイトの概念をサポートしていないため、問題が発生します。これを達成する手段はありますか?

バイト b=(バイト)0xF0; またはバイト b1=0x00; ソケット チャネルを介して適切に送信されません。サーバーへの書き込み方法をご覧ください。

public void encode(IoSession セッション、オブジェクト メッセージ、ProtocolEncoderOutput out) は例外をスローします {

    //lProxylogger.info("Inside ProtocolEncoderAdapter. Encoding response to client..");
    String response ;

    //lProxylogger.info("The response length in encode adapter is "+ response.length()+" Message="+response);
    byte[] responseStream; 

    response=(String) message;

    responseStream= response.getBytes("windows-1252");

    //responseStream=serialize(message);

     IoBuffer buffer = IoBuffer.allocate(responseStream.length);
    // buffer.putInt(response.length);
     //IoBuffer buffer=(IoBuffer)message;
      // buffer.putObject(message);
     System.out.println("Encoded Response:"+new String(responseStream));
     for(byte b:responseStream)
         System.out.print(b+",");
     System.out.println();
     buffer.put(responseStream);
//     lProxylogger.info("the response buffer size is "+ buffer.capacity());
     buffer.setAutoShrink(true);
    buffer.shrink();
  //  lProxylogger.info("After shrinking the buffer size is "+ buffer.capacity());
     buffer.flip();

    //System.out.println("Writing response to Stream..");
    out.write(buffer);

}
4

2 に答える 2

5

符号の有無は、1 バイトの 8 ビットをどのように解釈するかにかかっています。署名することで長くも短くもならず、送信することにも何ら変わりはありません。バイトを送るだけです。そのバイトが符号なしの場合に符号なしとして扱うように解釈するのは何でも構いませんが、これはそれを 8 ビットとして表現したり送信したりすることとは関係ありません。

于 2013-04-08T05:38:04.470 に答える