2017-08-30 11 views
-1

ネットワーク通信で、C++からMATLABに情報を引き出すために使用しようとしているコードがあります。 https://www.mathworks.com/matlabcentral/fileexchange/345-tcp-udp-ip-toolbox-2-0-6?s_tid=answers_rc2-2_p5_MLT7ビットの最大値を切り捨てたCコード

私の受信側では、int8の受信を期待しています。それから私はuint8のようにタイプキャストします。したがって、受信バイトごとに、0-255が値として期待されます。

私は受信側で127個の受信パケットを受信して​​いたところにいくつかの矛盾があることに気づき、128-255から送信するすべての値に対して、受信コード(pnet受信呼び出し直後)

このように、pnet.cファイルにバグがあり、値が完全にuint8の範囲を表示するのではなく、7ビットの最大値に切り捨てられると考えられます。

これはなぜ起こっているのでしょうか?私は主にmatlabユーザであり、データ型キャストに多くの時間を費やしていないので、私はここで少し深く感じています。私はここで何が起こっているかを考え出し

data = pnet('read',number of bytes to read,'noblock') 
+0

がどのようにあなたはそれが送信側では発生しないことを知っていますか? – 4386427

+2

ライブラリを使用しているMATLABコードを教えてください。 –

+0

'int8 -1'を' uint8'に「キャスト」すると、MATLABはCのようにして255を返しますか、それとも奇妙な切り捨てをしますか? –

答えて

1

が悪い/変なエラー文字を返すコードを受信します。 UDPソケット(Java/MATLAB UDPインプリメンテーションの強制キャストint8)を使用して127より大きい値をMATLABに渡し、受信すると予想されるデータのタイプを指定しない場合、MATLABは非記述型エラー文字。そのエラー文字を型キャストしようとすると、その型に対して可能な限り高い値にクランプされます。

私のケースでは、正しくデータを取得していたため、MATLABにuint8として受信するように正しく指示していないことに気づいていませんでした。したがって、それは0-127に対して正しく受信されましたが、私に128-255のエラー文字を与えました。私はその後、エラー文字を複数の型にキャストしようとしましたが、それぞれのキャストに対して、その特定の型の最大値として表示されていました。

修正プログラムでは、ソケット受信呼び出しに 'uint8'オプションを追加するだけで済みました。

固定コード:

data = pnet('read',number of bytes,'uint8','noblock') 
+0

修正を見つけられたらうれしいです。私は私の答えを削除します。 – informaton

+0

あなたの質問(作業していない)とあなたの答え(作業中)にコードを追加すると、この問題もあるかもしれない他の人にも役立ちます。また、[この回答を受け入れる](https://meta.stackexchange.com/q/5234/179419)を参考にして、問題が解決された広範なコミュニティを表示してください。 –

関連する問題