可能有损转换从int到byte

时间:2015-06-22 16:16:34

标签: java javax.comm

我正在尝试使用java将十六进制数据写入我的串口,但现在我无法将十六进制数据转换为字节数组。

以下是显示错误消息的代码:

static byte[] bytearray = {0x02, 0x08, 0x16, 0x0, 0x00, 0x33, 0xC6, 0x1B};

这是写入串口的代码:

try {
        outputStream = serialPort.getOutputStream();
        // Write the stream of data conforming to PC to reader protocol
        outputStream.write(bytearray);
        outputStream.flush();

        System.out.println("The following bytes are being written");
        for(int i=0; i<bytearray.length; i++){
            System.out.println(bytearray[i]);
            System.out.println("Tag will be read when its in the field of the reader");
        }
} catch (IOException e) {}

我可以知道如何解决这个问题。目前我正在使用javax.comm插件。谢谢。

2 个答案:

答案 0 :(得分:3)

如果您查看错误消息:

Main.java:10: error: incompatible types: possible lossy conversion from int to byte
    static byte[] bytearray = {0x02, 0x08, 0x16, 0x0, 0x00, 0x33, 0xC6, 0x1B};
                                                                  ^

指向值0xC6的小插入符号。问题的原因是java的byte已签名,这意味着它的范围是-0x80到0x7F。您可以通过强制转换来解决此问题:

    static byte[] bytearray = {0x02, 0x08, 0x16, 0x0, 0x00, 0x33, (byte) 0xC6, 0x1B};

或者,您可以使用-0x3A的负的范围内值(在两个补码表示法中相当于0x36)。

答案 1 :(得分:0)

尝试像0xC6那样投射-0x80字节范围从0x7Fstatic byte[] bytearray = {0x02, 0x08, 0x16, 0x0, 0x00, 0x33, (byte) 0xC6, 0x1B};

if( file_exists($file_path) && filesize($file_path) > 0){
      $counter = 0;
      if(false !== ($read_file = fopen($file_path,'r')) ){
        $output_file = fopen($file_output,'w');
        while(false !== ($data = fgetcsv($read_file))){
          $outputData = array($data[1], $data[6], $data[19]);
          fputcsv($output_file, $outputData,',');
        }

      }
      fclose($read_file);
      fclose($output_file);
      unset($outputData);

    }

Output: data1,data6,"data9
 "