見てみたらHEXで送信しているっぽいです。
サトウは外出してしまいました。
>HEXで送信しているっぽいです
意味不明です。
HEXで送信とは?
16進表記も10進表記も同じ値ですし。
Byte b = 0x10;
も
Byte b = 16;
も同じ値。
モニタ側の表示をASCIIからHEXに変更したら、
ASCIIコードがでてきました。
例えば、プログラムからの入力が 1 ならば
モニタ上で 31 がでてきました。ASCIIの1ですよね。
意味わかりますかね。
ASCIIコード表見てもらえてないのでしょうか?
文字の'1'は16進のASCIIコードでは 31 ですが、10進のASCIIコードでは 49 という値で
す。
C言語で簡単なプログラムを書くと
#include <stdio.h>
int main(void)
{
char c;
c = 0x31; // 16進
printf(%c\n, c);
c = 49; // 10進
printf(%c\n, c);
return 0;
}
てので同じ文字の '1' が表示されるのが確認できると思います。
なので、たとえば
123
という文字列を送っていて、
49 50 51
という数値の羅列を取得できればちゃんと送信できているということになります。
ありがとうございます。
できたっぽいです。
すごい助かりました。
申し訳ありませんが、もうひとつ教えてください。
下記の3つをくっつけることはできませんか。
array<Byte>^ stx = {0x02};
array<Byte>^ etx = {0x03};
array<Byte>^encodedBytes = ascii->GetBytes( csvdatatrans );
シリアル出力するときに stx+encodedBytes+etx で送信したいんです。
this->serialPort1->Write(trans, 0, trans->Length);
3回に分けてはだめってことなら、
>array<Byte>^encodedBytes = ascii->GetBytes( csvdatatrans );
のサイズを元に+2のByte型配列をつくり、コピーする。
array<Byte>^ trans = gcnew array<Byte>(encodedBytes->Length + 2);
trans[0] = 0x02; // STX
// http://msdn2.microsoft.com/ja-jp/library/z50k9bft(VS.80).aspx
Array::Copy(encodedBytes, 0, trans, 1, encodedBytes->Length);
trans[trans->Length - 1] = 0x3; // ETX
ありがとうございます。
ほぼできてきました。
また、ひとつわからないことがありまして
static array<Char>^chars = {',','\n'};
array<String^>^split = str->Split( chars );
これでデータをsplitしているはずですが、
改行が除かれておりません。
何か問題があるのでしょうか。
なんかネットの向こう側の人 (Blue 氏) に自分の仕事をまる投げしてる
ようにしか見えないんだけどそれってどうなの?
少しは自分で調査・検証する気ってないわけ?