C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

シリアル通信 (本題はbyte配列から文字列を取得したい)


(過去ログ 8 を表示中)

[トピック内 9 記事 (1 - 9 表示)]  << 0 >>

■8293 / inTopicNo.1)  シリアル通信 (本題はbyte配列から文字列を取得したい)
  
□投稿者/ れれれ 二等兵(6回)-(2006/11/15(Wed) 13:59:09)

分類:[C#] 


分類:[C#] 

れれれです。

今回もわからないところがあったので質問させていただきます。
シリアル通信を使ってデバイスから文字列を取得しようと思ったのですが、取得された文字列(整数)はbyte型の配列の中に入れてますが、その取得したをメッセージボックスで表示させる方法がわかりません。
書いたプログラム/////////////////////
myBuffer = new char[1];
serialPort1.Read(myBuffer, 0, 1);
MessageBox.Show(myBuffer[1]);
/////////////////////////////////////////
どうか教えてください

0
引用返信 編集キー/
■8298 / inTopicNo.2)  Re[1]: シリアル通信 (本題はbyte配列から文字列を取得したい)
□投稿者/ Blue 中尉(151回)-(2006/11/15(Wed) 14:41:19)

分類:[C#] 

>byte型の配列の中に入れてますが
>myBuffer = new char[1];
矛盾しているような。(Byte型のサイズ≠char型のサイズ)

どんな文字コードで送信されるのでしょうか?
単なる1バイトのアスキーコードならば、1バイトの配列から文字を作ることは出来ますが、
Unicodeのように2バイトで1文字とか、
Shift_JISのように1バイトの文字もあれば、2バイトの文字もあるような場合、
単純に出来そうもないですが。
(文字列の終端を何とかして取得して、そこまでの配列というようにして、それからやっと変換できる。)

0
引用返信 編集キー/
■8300 / inTopicNo.3)  Re[2]: シリアル通信 (本題はbyte配列から文字列を取得したい)
□投稿者/ れれれ 二等兵(8回)-(2006/11/15(Wed) 15:29:43)

分類:[C#] 

返信ありがとうございます。

シリアル通信から受信するデータは、1や2の整数です。

0
引用返信 編集キー/
■8301 / inTopicNo.4)  Re[3]: シリアル通信 (本題はbyte配列から文字列を取得したい)
□投稿者/ Blue 中尉(153回)-(2006/11/15(Wed) 15:35:42)

分類:[C#] 

> 1や2の整数です。
ならば、そのままToStringで変換できるのでは?

Byte myBuffer = new Byte[1];
serialPort1.Read(myBuffer, 0, 1);
MessageBox.Show(myBuffer[0].ToString());

0
引用返信 編集キー/
■8302 / inTopicNo.5)  Re[4]: シリアル通信 (本題はbyte配列から文字列を取得したい)
□投稿者/ れれれ 二等兵(9回)-(2006/11/15(Wed) 16:17:10)

分類:[C#] 

返信ありがとうございます

教えていただいたプログラムを実行したところメッセージボックスには49とでてきました。ちなみに受信しているデータ(デバイスがPCに送っているデータ)は"1"という整数です。

0
引用返信 編集キー/
■8303 / inTopicNo.6)  Re[5]: シリアル通信 (本題はbyte配列から文字列を取得したい)
□投稿者/ Blue 中尉(154回)-(2006/11/15(Wed) 16:23:12)

分類:[C#] 

>"1"という整数です。
違うと思う。
'1'という文字ではないですか?
つまりアスキーコードでいうと 49 ということです。

0
引用返信 編集キー/
■8304 / inTopicNo.7)  Re[6]: シリアル通信 (本題はbyte配列から文字列を取得したい)
□投稿者/ れれれ 二等兵(10回)-(2006/11/15(Wed) 16:32:27)

分類:[C#] 

なるほど、たしかに1という文字を送っていました。
だとしたら、これを正しくメッセージボックスに1と表示するにはどうすればいいのでしょうか。
教えてばかり頂いて申し訳ありません

0
引用返信 編集キー/
■8305 / inTopicNo.8)  Re[7]: シリアル通信 (本題はbyte配列から文字列を取得したい)
□投稿者/ Blue 中尉(155回)-(2006/11/15(Wed) 16:36:23)

分類:[C#] 

2006/11/15(Wed) 16:39:12 編集(投稿者)

charにキャストするとか。
MessageBox.Show(((char)myBuffer[0]).ToString());

もしくは、

48 −→ 0
49 −→ 1
50 −→ 2


ってのを使って、

MessageBox.Show((myBuffer[0] - '0').ToString());

とか。

(ほかにもString.FormatとかToStringで指定できるかもしれない)


本当は、System.Text.Encodingクラスを使うべきなんでしょうけど。

0
引用返信 編集キー/
■8307 / inTopicNo.9)  Re[8]: シリアル通信 (本題はbyte配列から文字列を取得したい)
□投稿者/ れれれ 二等兵(11回)-(2006/11/15(Wed) 16:56:32)

分類:[C#] 

ありがとうございます。
キャスト、引き算をつかうの両方ともで1と表示されました。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -