前提・実現したいこと
初めての質問ですので、不備があるかもしれませんが、よろしくお願いいたします。
また、C#,C/C++どちらも初心者です。
現在、ある計測装置からUDPで送られるバイト型のデータをdouble型のデータに変換したいと思っています。
###質問の内容
特にC#のBitConverter.ToDouble メソッドを用いたコードをC/C++でも実現したいです。
発生している問題・エラーメッセージ
計測装置側のソフトウェアで表示される値とこちらのプログラム側で出力される値が異ってしまいます。
問題となっている値は2つで、それぞれx,yとすると以下のような感じの出力になります。
例:
計測装置側
x = 0.22315
y = -0.56878
プログラム側
x = 0.00000
y = 65464562132132165498.00000
これらの値以外にもバイト型のデータを整数型に変換した値もありますが、こちらの方は計測装置側とプログラム側の出力値が一致したので、恐らくUDP通信に問題はないと思われます。
また、下に示すC#のコードは自分が実装したものではありませんが、実装した人曰くx、yの値は計測装置側とプログラム側で一致するらしいので、恐らくバイト型配列の取得位置も問題ないと思います。
従って、C#のBitConverter.ToDouble メソッドを用いたコードに対応するであろうc/c++でのバイト型配列のdouble型変換にエラーがあると思われます。
2つの値x,yはどちらも同じ処理を行います。
該当のソースコード
C#
1 2byte[] data = udp.Receive(ref remoteEP); 3byte[] fuga1 = { data[7], data[6], data[5], data[4], data[3], data[2], data[1], data[0] }; 4byte[] fuga2 = { data[15], data[14], data[13], data[12], data[11], data[10], data[9], data[8] }; 5double x = BitConverter.ToDouble(fuga1, 0); 6double y = BitConverter.ToDouble(fuga2, 0);
C
1byte data[20]; 2NetWorkRecvUDP(NetUDPHandle, NULL, NULL, Data, sizeof(Data), FALSE); #dxライブラリ関数使用 3byte fuga1[] = { data[7], data[6], data[5], data[4], data[3], data[2], data[1], data[0] }; 4byte fuga2[] = { data[15], data[14], data[13], data[12], data[11], data[10], data[9], data[8] }; 5 6/// 7memcpy(&x, fuga1, sizeof(fuga1)); 8memcpy(&y, fuga2, sizeof(fuga2)); 9/// 10 11/// 12double x = *(double*)&fuga1; 13double y = *(double*)&fuga2; 14///
試したこと
いくつかのサイトを参考にして記述した、C/C++の///ソースコード///で示したのを両方試しましたが、ダメでした。。。
補足情報(FW/ツールのバージョンなど)
開発環境 VisualStudio2019
言語 C/C++
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/06/18 05:54
2021/06/18 10:30
2021/06/18 11:02
2021/06/18 11:44
2021/06/18 13:06
2021/06/19 13:04