<vb6の掲示版へ誤って投稿していた為、移動しました>
vb.net 2005 で下記の様な条件のチェックサムの実装方法について、
教えて下さい。
「チェックサム以外の送信データの和+チェックサム=下位2バイトが0x0000となる値」
※チェックサム以外の送信データの和は、該当する各送信データの1バイト単位の和
下記が現在うまくいかないソースになります。
''Check Sum -----------------------------------
''bytSendDataが送信データ
Dim srtChk As Integer = 0
'チェックサムを除いた送信データの和
For intCnt As Integer = 0 To bytSendData.Length - 3
srtChk = srtChk + bytSendData(intCnt)
Next
'送信データの和よりチェックサムを計算
srtChk = &H10000 - srtChk
Dim srtSumH As Short = &HFF And (srtChk >> 8)
Dim srtSuml As Short = &HFF And (srtChk)
'チェックサムの設定
bytSendData(37) = srtSumH
bytSendData(38) = srtSuml
>魔界の仮面弁士様
下記について、チェックサムの値が提示している条件と異なるっているのであろうと思われす。bytSendDataにセットする段階ではエラーは発生していません。(ちなみにFelicaの携帯のカードにデータを送信してブラウザの起動を行うという処理時のチェックサムの実装になります。)
>(チェックサムの値が予想値と異なるのか、それとも、計算した値を
> bytSendData にセットする段階で問題が発生しているのか、など)
bytSendData はどういう宣言してますか?(何型)
投稿されているコードを見ただけでは判断できない。str...がshortだったりIntegerだったりするので。
もし、bytSendData がshort型だったりしたら、「送信データの和」を求めた
時点で &H10000 を越えてしまうことが想定されるので正しく機能できなそう。
srtChk = &H12345
'送信データの和よりチェックサムを計算
srtChk = &H10000 - srtChk
チェックサムとして送るデータが &H2345 となる。