排他的論理和 BCC(水平パリティ《偶数》)の算出
VC++6.0 MFCダイアログベースでプログラミングの勉強をしています。
RS232Cを使って、相手側の機器から送られてきた、
受信データが正しいか水平パリティチェックを行いたいと思っています。
下記のように作り、 bcc[0] ^= pszBuf; この部分で受信した
データの排他的論理和の計算をしているのですが、これでは中身ではなくアドレスを
計算しているようでした・・・。
どのように直したら良いでしょうか?
charBuf[32]; // 読み出しデータバッファ
int i; // BCCチェックループ回数
char bcc[1] = {0}; // BCC計算結果
// 受信
ReadFile(m_hComm, // ファイルハンドル
(LPCVOID*)Buf, // バッファアドレス
(DWORD)dwCount, // サイズ
&dwRead, // 実際のサイズを格納する変数
NULL); // OVERLAPPED構造体
// 該当範囲の排他的論理和XORを取る
pszBuf++; // 最初の[STX]は計算除外なのでインクリメント
for(i = 0; i < 9; i++) { // 9回計算する。
bcc[0] ^= pszBuf;
pszBuf++;
}
受信するデータは JIS/ASCIIコード です。
受信する形式は [STX] X X Y Y Y Y Y Y [ETX] [BCC] です。
BCCの計算は X ^ X ^ Y ^ Y ^ Y ^ Y ^ Y ^ Y ^ [ETX] = [BCC]
No.3ベストアンサー
- 回答日時:
★アドバイス
・『ReadFile』関数のキャストは必要ありません。
・『Buf』はポインタではないので『buf++』は出来ません。
・『dwCount』には『32』がセットされていますか?
・『dwCount』と『dwRead』は DWORD 型ですよね。
・下にサンプルを載せますので、これを参考にソースを見直して下さい。
サンプル:
TCHAR bcc[ 1 ] = { 0 };
TCHAR Buf[ 32 ];
DWORD dwRead;
INT i;
if ( ReadFile(m_hComm,Buf,sizeof(Buf),&dwRead,NULL) ){
LPTSTR lpBuf = Buf + 1; // 最初の[STX]は計算除外なのでインクリメント
for ( i = 0 ; i < 9 ; i++ ){ // 9回計算する。
bcc[ 0 ] ^= *lpBuf++;
}
}
最後に:
・ソースを載せるのならば省略しない方がいいでしょう。
・以上。おわり。
この回答への補足
Oh-さん返事遅くなりました。
無事期待通りの結果をえることが出来ました。
本当にありがとうございました。
win32 console applicationでも試しにやってみましたが
うまくいきました。
#include <stdio.h>
#include <afx.h>
int main()
{
TCHAR bcc[ 1 ] = { 0 };
TCHAR Buf[ 32 ] = "00000000000";//受信データの代わり
int i;
LPTSTR lpBuf = Buf + 1; // 最初の[STX]は計算除外なのでインクリメント
//bcc[0] = 0^0^0^0^0^0^0^0^0 =0x30
for ( i = 0 ; i < 9 ; i++ ){ // 9回計算する。
bcc[ 0 ] ^= *lpBuf++;
}
printf("bcc = %x\n",bcc[0]);
return 0;
}
No.4
- 回答日時:
LPCVOID自体がVOID*なので
(LPCVOID*)Buf
は
(VOID**)Buf
になっちゃいますよ
php504さんありがとうございます。
最初 (LPCVOID)Buf とした所、
2 番目の引数を 'char' から 'void *' に変換できません。
とエラーが出たので、安易に*を付けてしまいました。
下記コードを使うことにしました。
if ( ReadFile(m_hComm,Buf,sizeof(Buf),&dwRead,NULL) ){
No.2
- 回答日時:
コードを見て疑問に思ったこと:
その「pszBuf」ってのは, どこでどのように定義されてるの? ReadFile で受信するときにはバッファアドレスとして Buf を使ってるんだけど, それと pszBuf とはどのような関係なの?
この回答への補足
Tacosanさん回答ありがとうございます。
せっかく読んでいただいたのに失礼なことをしてしまい申し訳ございません。
誤記です。 pszBuf = Buf バッファなんで余計なpszなくても良いかと思って削除したのですが、中途半端でした。
以下が修正版です。
char Buf[32]; // 読み出しデータバッファ
int i; // BCCチェックループ回数
char bcc[1] = {0}; // BCC計算結果
// 受信
ReadFile(m_hComm, // ファイルハンドル
(LPCVOID*)Buf, // バッファアドレス
(DWORD)dwCount, // サイズ
&dwRead, // 実際のサイズを格納する変数
NULL); // OVERLAPPED構造体
// 該当範囲の排他的論理和XORを取る
Buf++; // 最初の[STX]は計算除外なのでインクリメント
for(i = 0; i < 9; i++) { // 9回計算する。
bcc[0] ^= Buf;
Buf++;
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(メールソフト・メールサービス) thunderbird BCCが来なくなった 1 2023/04/07 13:30
- Gmail Aさんが、BさんとCさんをbccに入れて送信したメールを、 Bさんが、Dさんに転送した場合。 Dさん 4 2022/11/28 22:23
- Gmail メーラーのThunderbirdの送信機能に関する質問です 3 2022/07/10 10:58
- 統計学 t値の計算方法 1 2022/11/29 18:37
- 化学 金属の同素変態の生じる温度と結晶構造の変化を調べるているのですがなかなか見つかりません。 鉄(Fe) 1 2022/04/22 19:10
- C言語・C++・C# このプログラミングの問題を教えてほしいです。 キーボードからデータ数nとn個のデータを入力し、平均値 3 2022/12/19 22:51
- Visual Basic(VBA) vba 等間隔の列に対しての計算 6 2022/05/17 20:15
- Gmail 複数名宛に全体に送られてきたメールを送信者のみに返信したら、他の人からは私が返信した内容を一斎内容を 2 2023/04/07 11:14
- C言語・C++・C# C言語 3 2022/10/04 15:07
- その他(ビジネス・キャリア) メール。BCCとCCを間違えて送信。 デジタル庁がやったそうです。 これって、相当初歩的なミスですよ 3 2022/04/01 22:07
このQ&Aを見た人はこんなQ&Aも見ています
-
外出時に「待たせる妻」vs イライラする「待つ夫」は日本だけ?見習いたい海外事情
夫の家事参加に積極的なイメージのある海外でも、同様の事例はあるのか。結婚カウンセラーの佐竹悦子さんに伺ってみた。
-
TCP/IP通信の送信データについて
Visual Basic(VBA)
-
偶数パリティ
C言語・C++・C#
-
2の補数を計算するプログラム
C言語・C++・C#
-
-
4
Visual Basic でのコードをASCII変換、16進変換したものを元に戻す方法を教えてください
Visual Basic(VBA)
-
5
VBA2005 16進を2桁で表示したい。
Visual Basic(VBA)
-
6
C# シリアル通信でデータ受信時の欠損について
C言語・C++・C#
-
7
配列内の文字間を排他的論理和でチェックサムを算出するt
C言語・C++・C#
-
8
VB6.0でのバイナリデータの扱いについて
Visual Basic(VBA)
-
9
Excelで、空白を表示したい
Excel(エクセル)
-
10
exeファイルの中身を見ることは可能ですか?
フリーソフト
-
11
VB2010で、シリアル通信の方法を教えてください。
Visual Basic(VBA)
-
12
シリアル通信でのデータ分け
C言語・C++・C#
-
13
teratrermを使ったデータの送信について
Windows 10
-
14
CRC16計算について
C言語・C++・C#
-
15
FTPエラー425
その他(コンピューター・テクノロジー)
-
16
【C#】textBoxの指定行のデータを削除
C言語・C++・C#
-
17
なぜ通信には16進数文字列が使われるのでしょうか シリアル通信や、xbeeなど、通信には16進数文字
ネットワーク
-
18
VBコンソールアプリ(.NET Framework)でRS-232C通信したい。
その他(プログラミング・Web制作)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語のプログラミングの問題で...
-
65536は2の何乗なのでしょうか?
-
タクシー料金の問題です
-
バッチファイルでウインドウを...
-
骨折リスク評価のFRAXについて...
-
prolog計算
-
EXCELなどで「返す」という表現
-
三菱シーケンサー works2 の日...
-
Excel VBA TREND関数について
-
VBAで電卓を作成する
-
VBA 九九 Do While
-
モジュラス103の計算とは何でし...
-
電卓でmodの計算
-
C言語で、べき乗の計算方法につ...
-
[ASP]日付と時間の比較
-
ステップ数と計算量?
-
PHPとJavaでSHA256の結果を同じ...
-
スレッド処理からダイアログを...
-
移動平均を計算するプログラム
-
数十万番目の素数を表示させる...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
65536は2の何乗なのでしょうか?
-
VBAの再計算が反映されない件に...
-
排他的論理和 BCC(水平パリテ...
-
EXCELなどで「返す」という表現
-
バッチファイルでウインドウを...
-
モジュラス103の計算とは何でし...
-
傾いた四角形内の範囲の条件式
-
Visual C++でdebugとreleaseで...
-
変化させるセルが変化しない
-
骨折リスク評価のFRAXについて...
-
C# 計算処理中に実行中ウィン...
-
VBAでの勤務時間計算
-
べき乗の計算が遅い理由
-
C言語についてです。 再帰を使...
-
Excel VBAにてFFT
-
数値計算の高速化 (cos, sin, exp)
-
VBとVBAの違い
-
VB6で正確なミリ秒を計測したい...
-
スレッド処理からダイアログを...
-
matlabで計算終了
おすすめ情報