
現在ハンディターミナル(HT)とPCとの通信を行うプログラム(VB6.0)を作成しています。
このプログラムは元々VB2.0で作成されたものをベースとしてVB6.0で再作成しているものです。
プログラムの中でHTとPCとの通信エラーを防ぐため、データ行のBCCを計算しHTに送信している
部分があります。VB6.0ソースを下に表示します。
(実際は、計算したBCCをデータ(下のCheckString変数)の最終行にくっつけてHTに送信していますが、ここではBCCのみ送信しています)
-------------------------------------------------○VB6.0
/* 最初にBCCを計算して返し、HT側へ送信している */ /* BCCはstring */
Dim i As Integer, aa As Integer,BCC as String
aa = 0
For i = 1 To Len(CheckString)
aa = aa Xor Asc(Mid(CheckString, i, 1))
Next
BCC = Chr$(aa)
frmMain.MSComm1.InBufferCount = 0
frmMain.MSComm1.Output = BCC
------------------------------------------------
VB2.0ではAscB,LenB,MidBのところをVB6.0ではAscB,LenB,MidBをAsc,Len,Midへ変更しています。通常はこれで問題ありませんでしたが、BCCの計算の結果aa = 226となった場合にBCCに文字化けした"r"のような文字がはいっていました。プログラムの中でBCC変数をテキストへ吐き出し、バイナリエディタで確認しましたが"E2"となるところに"00"と空白となっており、これが原因でHTとPC間での通信が完了しません。
(テキスト送信時にStringのため文字化けが原因?)
前回の質問でSTRING型を使用せずにバイナリ型配列で処理する事や、いままで暗黙のうちにUnicode⇔SJIS変換を行ってくれていた部分をStrconvを使用し自前で処理しなければいけないというご指摘を受けたのですが、上のプログラムではどのように修正が必要なのでしょうか?どなたかご教授の程宜しくお願い致します。
No.1
- 回答日時:
BCCをStringで宣言しているのはダメです。
BCCの計算結果は0~255の範囲の全ての値になる可能性がありますが、
String型変数には、文字コードとして有効な文字しか入りません。
無効な文字コードをChr$()で与えてもChar$(0)に置き換えられてしまいます。
関連情報として、UBound、Redimあたりを調べると良いでしょう。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAで関数をつくる
-
65536は2の何乗なのでしょうか?
-
引き放し法による除算アルゴリ...
-
加速度から変位の変換について
-
モジュラス103の計算とは何でし...
-
バッチファイルでウインドウを...
-
CRC8を教えてください
-
matlabで計算終了
-
変化させるセルが変化しない
-
三菱シーケンサー works2 の日...
-
趣味で「乗換案内」みたいなソ...
-
アドオン利率を実質年率に変換
-
EXCELなどで「返す」という表現
-
構文解析を利用した計算プログ...
-
[ASP]日付と時間の比較
-
階乗のマクロ
-
パソコン
-
VBA入力フォームで労働時間の計...
-
ファイルの開き方
-
あるプログラムのコマンドライ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
65536は2の何乗なのでしょうか?
-
VBAで関数をつくる
-
VBAの再計算が反映されない件に...
-
EXCELなどで「返す」という表現
-
matlabで計算終了
-
排他的論理和 BCC(水平パリテ...
-
変化させるセルが変化しない
-
引き放し法による除算アルゴリ...
-
モジュラス103の計算とは何でし...
-
C言語についてです。 再帰を使...
-
スレッド処理からダイアログを...
-
階乗のマクロ
-
Perlで時間の計算
-
エクセルで特定のセルのみを任...
-
傾いた四角形内の範囲の条件式
-
モジュロ
-
VBA入力フォームで労働時間の計...
-
三菱シーケンサー works2 の日...
-
Java 電卓の連続計算
-
パソコン
おすすめ情報