在java和c#

时间:2018-04-03 11:42:47

标签: java c# serial-communication

我有两个与串口rs232对话的程序 1.使用pf SerialPort类用c#编写 2.用java编写,使用librxtx - SerialPort类

两者:BaudRate - 9600,奇偶校验无,StopBits - 1,DataBits - 8

他们与始终发送相同数据的设备进行通信

在c#中得到以下6个字节:255,98,144,19,1,0 在java中我得到以下6个字节:-1,98,-112,19,1,0

c#代码是正确的。

这是c#的代码:

m_serialPort = new SerialPort("COM15", 9600, Parity.None, 8, StopBits.One);
m_serialPort.DataReceived += SPDataRecieved;
m_serialPort.Open();

public override void SPDataRecieved(object sender, SerialDataReceivedEventArgs e)
{
       try
        {
            Thread.Sleep(80);
            byte[] toBytes = new byte[6];
            m_serialPort.Read(toBytes, 0, 6);


        }
        catch (Exception ex)
        {

        }

    }
}

这是java的代码:

m_SerialPort = (SerialPort) commPort;
m_SerialPort.setSerialPortParams 
(9600,SerialPort.DATABITS_8,SerialPort.STOPBITS_1,SerialPort.PARITY_NONE);
InputStream in = m_SerialPort.getInputStream();
byte[] buffer = new byte[6];
int len = -1;
Thread.sleep(80);
len = in.read(buffer,0,6);

我需要添加到java代码中的结果是一样的吗?

2 个答案:

答案 0 :(得分:1)

请注意,Java和C#中的byte[]有两个不同的原因:

  • Java字节类型已签名,而C#字节类型未签名(如果需要签名使用sbyte类型)
  • Java将byte存储为Big Endian,而C#默认使用Little Endian

由于java在语言中不包含无符号字节,因此可以通过以下方式打印到int的转换:

byte b = 0x3a;    // random value
return b & 0xFF;

答案 1 :(得分:0)

java字节是有符号的,而C#字节则不是。

使用以下内容转换每个java值:

newValue = (value + 256) % 256

// (-1 + 256) % 256 = 255
//  (98 + 256) % 256 = 98 etc