2016-04-08 12 views
0

ソケットにバイトとして書き込もうとしている16進数の文字列があります。ソケットJavaのバイトとして16進文字列を書き込む

String confDeliv = "\\x7E\\x01\\x00\\x20\\x37\\x02\\x03\\xF2\\xD5"; 

私は

byte [] Delivery_Conf = {(byte)0x7E, (byte)0x01, (byte)0x00, (byte)0x20, 
          (byte)0x37, (byte)0x02, (byte)0x03, (byte)0xF2, (byte)0xD5}; 

私の問題を試み、解決するためにこれをやって試してみました。しかし、私はソケットにそれを書くために成功するためには至っていません。私は何の誤りもありませんが、私がそれをデバイスに送信するとき、私が必要とすることはしません。私はこれを行う2つの異なる方法を試しました。

は1をお試しください:

DataOutputStream dOut = new DataOutputStream(sock.getOutputStream());           //69.171.154.64 

    for (int i = 0; i < Delivery_Conf.length-1; i++) { 
     dOut.writeByte(Delivery_Conf[i]); 
    } 
dOut.flush(); 

Iが、バイト配列に値Iが使用されるこの方法。

は2を試してみてください。

DataOutputStream dOut = new DataOutputStream(sock.getOutputStream());           

      dOut.writeBytes(confDeliv); 
      dOut.flush(); 

これは私が文字列が、まだ運としてそれを送信しようとしたとき、私は使用される方法です。私はバイト文字列を使用してPythonを使用すると、デバイスを動作させることができます。

例えば、

confDel = b"\x7E\x01\x00\x20\x37\x02\x03\xF2\xD5" 

私はそれを送信すると何か変わると思うので、私はそれをJavaで動作させることができます。私は周りを見回してきましたが、私の問題を助けてくれるものは見つけられません。

+0

デバイス側で受信した文字列が「間違っている」ことを正確に説明できますか? – uniknow

+0

私が見つけようとしていることがあります。 @uniknow – cunniemm

+0

私は '\ x7E'を必要とするバイトを送信するときに、スラッシュをバックスラッシュにする必要があります。それ以外の方法でコードを追加するにはどうすればいいですか?その仕事をするには? – cunniemm

答えて

0

次を使用する必要があります:あなたが一度にバイトを書いていたバージョンが動作するはず

byte [] Delivery_Conf = {(byte)0x7E, (byte)0x01, (byte)0x00, (byte)0x20, 
         (byte)0x37, (byte)0x02, (byte)0x03, (byte)0xF2, (byte)0xD5}; 
// ... 
dos.write(Delivery_conf); 

が、それは非効率的だし、それはデバイスがタイミング制約をしている可能性があります。

Stringを使用しているバージョンが正しくありません。 \xをコンパイルするための別のバックスラッシュを追加することは正しい解決策ではありません。\x\u00に変更する必要があります。ストリングを通して、それはもちろんです。

+0

「\ xを\ u00に変更する」とはどういう意味ですか?それは文字列のために間違っているので私はそれを私のバイト配列に傾ける。 – cunniemm

+0

私は '' String' 'を使ったバージョンです。私が実際に書いたことをお読みください。 – EJP

+0

私の悪いです。ご回答いただきありがとうございます。 – cunniemm

関連する問題