我现在有个C#的客户端程序用过RS-232C通信可以向一个 sensor 发送命令,这个命令的十六进制代码是 “2B 05 45 FF 95 ”,转换成字节数组是 [43,05,69,255,149] (C# byte 的值域是 0-255)这个字节数组通过输出流给sensor发过去,在输入流中可以读到 sensor 的回复。现在要用java 重写这个客户端,但是java 把这个十六进制的命令代码转换到字节数组后值是这样的 [43, 05, 69, -1, -107], 把这个字节数组通过java 的输出流发给sensor,但是在输入流中却读不到 sensor 的回复, 把这个字节数组给逆序一下, 还是收不到。请问是不是 java 写入的字节流命令不对,但是两个字节数组的二进制串好像是一样的啊,请高手们解答下!!!

解决方案 »

  1.   

    C#的发送代码是这样的:
    string strToSend = “2B 05 45 FF 95”;
    byte [] data = HexStringToByteArray(strToSend);//data = [43,05,69,255,149]
    serialForm.Write(data, 0, data.length);java 的代码是这样写的:String strToSend = “2B 05 45 FF 95”;
    byte [] data = HexStringToByteArray(strToSend); //data = [43, 05, 69, -1, -107]
    out.write(data); //out 为连接的输出流C#的程序在输入流中可以获得sensor的回复, 但是在java 的输入流中却什么也没有,电脑和sensor的连接是没问题的,不知道是不是java向输入流中写入的数据不对
      

  2.   

    lz可以加个Base64编码,它们就一致了,
      

  3.   

    谢谢各位了,已经找到问题了,原来是java 程序中serialPort的参数没有设置对,比特率那里设置错了。