質問編集履歴
1
質問の内容を変更します。
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
C++でのシリアルポートからのデータ受信時に、
|
1
|
+
C++でのシリアルポートからのデータ受信時に、0x00 データを取得する方法
|
test
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
### 前提
|
2
2
|
|
3
3
|
VC++でシリアルポートを使った機器Aと通信するアプリケーションを作っています。
|
4
|
-
送ってくるデータの文字列は、0x21
|
4
|
+
送ってくるデータの文字列は、byteデータの文字列で 0x2A 0x81 0x00 0x98 などです。
|
5
5
|
|
6
6
|
### 実現したいこと
|
7
7
|
|
@@ -9,11 +9,9 @@
|
|
9
9
|
|
10
10
|
### 発生している問題・エラーメッセージ
|
11
11
|
|
12
|
-
0
|
12
|
+
機器Aから 0x21810098 というデータを送信したとき、アプリケーションでは、 0x218198 取得し、 00 のデータが欠けてしまいます。
|
13
|
+
欠けないようにするにはどうすればよいでしょうか?
|
13
14
|
|
14
|
-
ここにかかれているように、127 より大きいすべての文字を (char)63 または '?' としてエンコードしてしまうのが原因かと思いますが、シリアルポートへの出力時ではなく、シリアルポートからの入力時に128以上のデータも認識するようにするにはどうしたらよいでしょうか?
|
15
|
-
|
16
|
-
https://docs.microsoft.com/ja-jp/dotnet/api/system.io.ports.serialport.write?view=dotnet-plat-ext-6.0
|
17
15
|
|
18
16
|
### 該当のソースコード
|
19
17
|
|
@@ -24,17 +22,24 @@
|
|
24
22
|
/* 引数 EventArgs */
|
25
23
|
Ports::SerialDataReceivedEventArgs^ e)
|
26
24
|
{
|
25
|
+
int i;
|
26
|
+
int wiRecvLength;
|
27
|
+
String^ wstrRcvBuf;
|
28
|
+
array<byte>^ readBuffer = gcnew array<byte>(256);
|
29
|
+
|
30
|
+
wiRecvLength = serialPort->Read(readBuffer, 0, 256);
|
31
|
+
|
32
|
+
for (int i = 0; i < wiRecvLength; i++)
|
33
|
+
{
|
34
|
+
|
35
|
+
wstrRcvBuf += readBuffer[i].ToString("x2");
|
36
|
+
|
37
|
+
}
|
38
|
+
|
27
39
|
RecvDataCallBack^ d = gcnew RecvDataCallBack(this, &FormMain::RecvData);
|
28
|
-
this->Invoke(d, s
|
40
|
+
this->Invoke(d, wstrRcvBuf);
|
29
41
|
}
|
30
42
|
|
31
|
-
void FormMain::RecvData(
|
32
|
-
String^ wstrData) /* 引数 受信Data */
|
33
|
-
{
|
34
|
-
/* 受信した文字列をテキストボックスに表示 */
|
35
|
-
AddLog(String::Format("Recv : {0}", wstrRcvBuf));
|
36
|
-
|
37
|
-
}
|
38
43
|
### 試したこと
|
39
44
|
|
40
45
|
|