我现在做一个温控接收仪的东西,用TCP连接,但是那边需要发送一个口令:68770000df0  这样的,用16进制发送出去,字节方式,
我现在纠结中,问一下怎么发送16进制的字节,我试过很多方法都不行

解决方案 »

  1.   

    是指十六进制的字符串么?那么就是:
      String str = "68770000df0";
      byte[] message = str.getBytes();
    写就随意了,write(byte);
    如果是要将该十六进制转为数值来发送,那么就是:
      String str = "68770000df0";
      long data = Long.parseLong(str, 16);
    写的时候注意用ObjectOutputStream.writeLong(data);
    需要提醒你的是,一般这种都会有结束符,否则对方无法判定你这个口令字符串多长才结束,你需要了解下这个问题。
      

  2.   

    你以为对方是java虚拟机么?你用 ObjectOutputStream,那头不晕菜才怪发送16进制字节指令:
    从连接里得到输出流,然后 out.write(0x06);
                          out.write(0x87);
                          out.write(0x70);
                          out.write(0x00);
                          out.write(0x0d);
                          out.write(0xf0);估计就差不多了
      

  3.   

    话说...68770000df0 <- 这个东西是String还是一个字节数组...你也不说清楚...
    字符串的话
    String str = 68770000df0;
    OutputStream os = somewhere.getOutputStream(); // 获取你的输出流
    os.write(str.getBytes());
    os.flush();字节数组就直接发送就行了
    byte[] buf = {0x06,0x08,0x07,0x07,0x00,0x00,0x00,0x00,0x0d,0x0f,0x00 };
    OutputStream os = somewhere.getOutputStream(); // 获取你的输出流
    os.write(buf);
    os.flush();AND:流操作都是直接操作字节的,不知道你说的试了很多方法都不能操作字节是肿么回事...
    AND..16进制,10进制,2进制只是为了让我们方便"观看"字节的值而已,字节就是字节...
      

  4.   


    不会晕菜的,我又没发送Object,只是利用它writeLong()函数将long型数据转为byte数组而已。不过核心仍然是原始数据究竟是什么内容,16进制整数还是字符串,楼主一直没揭秘。
      

  5.   

    你不知道ObjectOutputStream在构造时,会往包装流里写入一些标志位的么?
    如果不是基于java序列化操作,不要使用ObjectIn/OutputStream