TCP/IP通信の送信データのBCC算出方法とは?

このQ&Aのポイント
  • TCP/IP通信の開発をしている際、送信データのBCC(水平パリティ)の算出方法が分からない場合について解説します。
  • 送信データには制御文字が含まれており、その中でも特に重要なBCCの算出方法について詳しく説明します。
  • BCCは、STXとETXの間のテキスト部分に対して、バイト単位でXOR演算を行い、結果を上位と下位の4ビットに分けてASCIIコードに変換して転送します。
回答を見る
  • ベストアンサー

TCP/IP通信の送信データについて

TCP/IP通信の開発をしています。 開発はVS 2005 VB.net です。 送信データは下記の通りとなっていますが、BCCの算出方法が分かりません。 送信データ:[STX TEXT ETX BCCH BCCL CR] 制御文字は下記の通りです。 STX 02H(hex) テキストの開始 ETX 03H(hex) テキストの終了 BCC 水平パリティとして誤り検出に使用する CR 0DH(hex) キャリッジリターン ※1)BCCは、STXの後からETXの前までバイト単位でXORを行い、結果を上位と下位の4ビットに分け、それぞれASCIIに変換して上位下位の順で転送する。 ※2)BCC計算範囲はTEXT部です。 ※1)の部分を同コーディングすればよいか分かりません。 ご教授いただければと思います。

  • m6k22
  • お礼率65% (15/23)

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

http://ideone.com/RLvzH という話?

m6k22
質問者

お礼

早急な回答ありがとうございます。 まさにこれだと思います。 これでテストしてみます。 ありがとうございました。

関連するQ&A

  • 友達の質問に回答したいんですが、ネットワークに関することです。

    友達の質問に回答したいんですが、ネットワークに関することです。 ネットワークの最初のくだりになるんですが、 「あ」という文字をネットワークで送信する。 「あ」はUNICODEの「3042」です。これを2進数で表示すると、「1001110110010」です。これを2バイトで表示すると、「0001001110110010」です。それに、ベーシック手順で送信なれらば、SOH(ヘッディング開始)【0000001】ヘッディング【0000001】、STX(テキスト開始)【0000010】データ、ETX(テキスト終了)【0000100】BCC【偽りチェックということで、水平パリティ、垂直パリティとあります。それによってデーターが変わります。】これだけのデータを送信します。 「あ」=  「00010011101100100000001000000100000100000100」これにパリティチェックです。 これで、いいのでしょうか?

  • シリアル通信:フロー制御

    シリアル通信:フロー制御 シリアル通信のフロー制御について教えて下さい。 とある解説ページにて Xon/Xoff はバイナリデータの送受信には 使用できない。 と書いてあったのですが、これは伝送フォーマット[A] は NGになり、 [B] で通信しなさいという意味になるのでしょうか? それとも[C]の場合がNGになるということでしょうか? <伝送フォーマット> [A] STX | テキスト | ETX | CR | LF [B] テキスト| CR | LF [C] STX | バイナリ | ETX | CR | LF よろしくお願いします。

  • RS-422Aの通信

    三菱電機のQJ71C24N-R4でチラーとの通信をしたのですが 通信できないで困っています、チラーの通信仕様は、 スタートビット 1、データビット 8 パリテイー なし  ストップビット 1 誤り制御 水平パリテイー です、送信は EOT アドレス 職別子  ENQ    受信は STX 職別子 データ ETX BCC です、三菱電機のQJ71C24N-R4は垂直パリティー ですので、通常のOUTPUTで送信しても、。相手から 何もかえってきません、どうしたらいいのか大変こまっています 通信プロトコルは。無手順でしています 経験のある方、ご教授お願いします

  • 排他的論理和 BCC(水平パリティ《偶数》)の算出

    排他的論理和 BCC(水平パリティ《偶数》)の算出 VC++6.0 MFCダイアログベースでプログラミングの勉強をしています。 RS232Cを使って、相手側の機器から送られてきた、 受信データが正しいか水平パリティチェックを行いたいと思っています。    下記のように作り、 bcc[0] ^= pszBuf; この部分で受信した データの排他的論理和の計算をしているのですが、これでは中身ではなくアドレスを 計算しているようでした・・・。 どのように直したら良いでしょうか? char Buf[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]

  • EXCELでの16進数取り出し、上位桁と下位桁取り

    恐れ入ります。詳しい方教えてください。 各セルに2000までの数値があるデータがあり、このデータを16進数表記で、上位2桁と下位2桁に分けたいと考えています。 例) 870  → &h03, &h66 (870は10進数で366が16進数、これを&hを付けて03と66に分けたい) 1926 → &h07, &h86  ="0x"&DEC2HEX(C4, 4)を使って16進数4桁にすることまでは調べたのですが、上位2桁、下位2桁に分けられず悩んでいます。

  • シリアル通信プログラミングでのバイナリデータ送信

    UNIX系環境(IRIX)でのシリアル通信プログラムを作成していて、 バイナリデータの送信方法がわからず困っています。 write関数を使い、テキストデータの送信は出来ます。 write(fd,"テキスト",byte)のように。 ただ、今回はバイナリデータ送信を考えており、 例えば1byteのデータ00000001(01H)を送りたいと思っています。 このデータを送る場合、write関数で実現出来るのでしょうか? write(fd,0x01,1)←イメージです。 色々ネットで調べても出てきません。 開発がWindows環境ではないので、API関数が使えない状況で困っています(MsComm等が使えない)。また、fwrite関数は使用してはいけないみたいです。教えてください。宜しくお願いします。

  • 基本情報技術者試験のビットに関する問題

    最上位をパリティビットとする8ビット符号において、パリティビット以外の下位7ビットを得るためのビット演算はどれか。 ア 16進数0FとのANDをとる イ 16進数0FとのORをとる ウ 16進数7FとのANDをとる エ 16進数FFとのXOR(排他的論理和)をとる 解答 ウ なぜ ウ の7FとのANDなのかさっぱり分かりません。 解説お願いします。

  • 基本情報技術者試験 論理演算に関する問題

     最上位をパリティビットとする8ビット符号において,パリティビット以外の下位7ビットを得るためのビット演算はどれか。 ア 16進数0FとのANDをとる。 イ 16進数0FとのORをとる。 ウ 16進数7FとのANDをとる。 エ 16進数FFとのXOR(排他的論理和)をとる。 (基本情報技術者試験 平成18年度春季午前 問6) この問題の解説お願いします。パリティビットって何ですか。いまいちよく分かりません。

  • 基本情報技術者試験のビットに関する問題 

    最上位をパリティビットとする8ビット符号において、パリティビット以外の下位7ビットを得るためのビット演算はどれか。 ア 16進数0FとのANDをとる イ 16進数0FとのORをとる ウ 16進数7FとのANDをとる エ 16進数FFとのXOR(排他的論理和)をとる 解答 ウ なぜ ウ の7FとのANDなのかさっぱり分かりません。ウだと2進数にした場合 01111111 ですよね?なぜこうなるのか分からないのです。 解説お願いします。

  • H8の通信について

    H8S/2215(以下H8)の通信について質問があります。 なお開発環境は、下記の通りです。 H8(データ送信側):C(High-performance Embedded Workshop) PC(データ受信側):C#(Visual Stdio) H8は、4種類のデータ(以下測定データ)が各10個分溜まったらデータ送信するというものです。 下記が送信の詳細です。 ・2ms間隔で測定データを取得 ・測定データは、0からインクリメントしたデータ(0~65535) ・シリアル通信 ・送信形式は、EE 80 XX XX XX ・・・EE FF  測定データは上位8bit、下位8bitに分割(例:43690(10進)→AA AA(16進))  (XXは送信データ、EE80,EEFFは固定)  例:EE 80 AA AA AA AA AA AA・・・EE FF PCは、その送られてきたデータの異常判定をしています。受信したデータは全てログに保存しています。 通信の仕様は、57600bps,パリティチェック無し,データビットは8,ストップビットを1にしています。 現在受信したデータは、一部かけて受信しています。データは、約30,40ほどかけています。しかし、一部かけて受信するという事象は、30000~39999にかけて起こっていることが分かりました。(測定データを0~65535で取得している場合) その他の受信時のデータにはそのような事象が起こっていません。 測定データを30000~39999で限定した場合、データ受信するとログデータに受信データの一部かけるという事象が全ての測定で起こっています。 データの一部がかけるという間隔は特に、周期があるとは思われませんでした。 なぜ、測定データが30000~39999の間では受信データが一部かけるということが起こるのでしょうか?それとも、30000台という数字に特に意味がないのでしょうか? もしお分かりになる方がいらしましたら、ご教授願います。

専門家に質問してみよう