2016-05-06 11 views
1

状況テキストを読み取ることができません:私はJAVAプログラムでプログラムしていを、C++で(だけexeファイルを私は内部にアクセスすることができません)。彼らは、例えば、 "REQ", "00", "1,3", "15,4", "PAUSE"。通信は、(送信)このように書きます:JAVA:私はC++で送信、ソケットからプログラム

J: REQ 
C: 00 
J: NEW 
C: 10 
J: RDY 
C: 2,13 
J: 20 
C: RDY 
J: 1,1 
(...) 

まずRDYが繰り返さコマンドを作った:RDYnumber,number20RDY(...)。

数:0 - 15

受信:

char[] bb = new char[10]; 
int znaki = in.read(bb); 
bb[7] = '\n'; 
String s = new String(bb, 0, 7); 

問題:私はのような数字を読ん

Send: 2,13 
Received: 2, 
Send: 3,15 
Received 3,1 
Send: 13,2 
Received: 13, 

しかし、時には、私が持っているIOExeption:「入力長= 1 "

正しく読める解決策はありますか?

+0

だから、http://stackoverflow.com/questions/37005553/communication-between-c-and-javaが解決され、C++でJavaで送信されるものを読むことができます。 – stefaanv

+0

'byte [] buf =新しいバイト[1024]; int znaki = in.read(buf);文字列s = new String(buf、0、znaki、StandardCharsets.ISO_8859_1); ' –

+0

f.e.g" REQ "を' char a [10] 'に読み込むと、7文字は空です(ガベージではありません)。私は慎重にチェックしなかった:P – Wiszen

答えて

1

C/C++では、charは1バイト、Java charは2バイトです。 byte配列をまず読み込み、同じ長さのchar配列を作成し、すべてのバイトをcharにキャストしてコピーします。私はストリームエンコーディングでいくつかの魔法をやることもできると確信していますが、あなたの簡単な例では、これはすべきです!

+0

"*同じ長さのchar配列を作成し、それを' char' *にキャストしてすべてのバイトをコピーする - 正しい方法ではないバイトから文字への変換を処理します。バイトが7ビットのASCIIである場合にのみ、 "動作"します。それ以外の場合は、適切な文字セットを指定した 'String'コンストラクタにバイト配列を渡すか、' Charset.decode() 'または' CharsetDecoder'を使用する必要があります。 –

+0

ありがとう@loonytuneが、私は別の方法でそれを解決しました。 JavaおよびC++プログラムでは、 '。'を追加します。文字列の最後に、f。 e。 g: "REQ。"とすべてがうまくあります:) – Wiszen

関連する問題