C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: チェックサムについて


(過去ログ 135 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■79678 / inTopicNo.1)  チェックサムについて
  
□投稿者/ 開発者A (1回)-(2016/04/29(Fri) 23:09:17)

分類:[VB.NET/VB2005 以降] 


.NETの開発でどうしても
わからない事があったので今回質問させていただきます。

開発環境はWindows7でVS2010(VB)にて開発をしています。

タイトルの通り、以下のような場合どのようなコードを書けばよいか
悩んでしまい投稿しました。。

ある文字列で形成されたデータの1 バイト毎の
加算値の下位1 バイトを16 進数表現したもの。
なお、数字でない場合、英文字の大文字を使用する。

お手数ですがご教授いただけると助かります。

引用返信 編集キー/
■79679 / inTopicNo.2)  Re[1]: チェックサムについて
□投稿者/ daive (111回)-(2016/04/30(Sat) 07:38:14)
2016/04/30(Sat) 08:04:43 編集(投稿者)
>ある文字列で形成されたデータの1 バイト毎の
>加算値の下位1 バイトを16 進数表現したもの。
>なお、数字でない場合、英文字の大文字を使用する。
これは、仕様ですか?それとも?
’
仕様であれば、掲示部分だけでは仕様がアバウト過ぎです。
仕様策定者に
数字とは、16進数表記:30h〜39h なのかどうか確認してください。
数字でない場合に大文字として扱うのは、
16進数表記:61h〜7Ah の事なのか確認してください。
16進数表記:61h〜66h だと思うけれど。
’
文字の範囲はどの範囲ですかから、確認しないと
16進数:00h〜FFh
16進数:20h〜7Eh
16進数:20h〜7Eh 、A0h〜DFh
EBCDIC/JIS/Shift-JIS/EUC/UTF8,16,32は含みませんねとか、
どんなパターンなのか、確認してください。
仕様であれば、他の部分の書き方も気になる、
⇒仕様策定者が、脳内村ルール、脳内既定事項を、
 他者が迷わない様に、書出せていない。
’
仮初めにも「開発者A」と名乗るのであれば、
検索ワード:
ご教授
位は検索して欲しいです。
’
チェックサムの 検索ワードとしては、
VB.NET チェックサム 計算
VB.NET チェックサム xor
VB.NET チェックサム windows
VB.NET チェックサム MD5
’
Windows計算機でTCPチェックサムを計算する方法
’
ついでに、以下も検索して記憶にとどめてください
VB.NET ハッシュ チェックサム
VB.NET ハッシュ 
VB.NET CRC
VB.NET CRC32
’
xor だけではなく、 MD5 でも検索されている様子
’
8ビットで行う場合、16ビットで行う場合、32ビットで行う場合
初期値が違う場合:昔は稀にあった。
’

引用返信 編集キー/
■79755 / inTopicNo.3)  Re[2]: チェックサムについて
□投稿者/ hagecha (1回)-(2016/05/12(Thu) 11:21:32)
測定機器などとの通信に使用する、単純加算方式のチェックサムについての質問と推測しました。
この場合、メーカーの通信仕様書には質問者さんが記載された内容以上の事は記載されていない場合が殆どなので
(チェックサムを使用しますとしか記載がない場合も…)、私は適当にロジックを考えて算出しています。

C#になりますがサンプルを掲示します。
(個人的なソースから引っ張り出したので冗長な処理がチラホラありますが、適宜見直してください)


private string GetCheckSum(string targetStr)
{
    byte[] workByte = new byte[0];
    if (rdoUnicode.Checked == true)
    {
        workByte = Encoding.Unicode.GetBytes(targetStr);
    }
    else if (rdoShiftJis.Checked == true)
    {
        //Unicode⇒ShiftJis変換
        workByte = Encoding.Unicode.GetBytes(targetStr);
        workByte = Encoding.Convert(Encoding.Unicode, Encoding.GetEncoding(932), workByte);
    }
    
    long sum = 0;

    for (int i = 0; i < workByte.Length; i++)
    {
        sum += long.Parse(workByte[i].ToString());
    }

    return = sum.ToString("X" + ChkSumLength.Text);
}

引用返信 編集キー/
■79756 / inTopicNo.4)  Re[3]: チェックサムについて
□投稿者/ hagecha (2回)-(2016/05/12(Thu) 11:29:14)
> この場合、メーカーの通信仕様書には質問者さんが記載された内容以上の事は記載されていない場合が殆どなので
メーカーというと語弊がありました。
海外の測定機器を日本国内で取り扱う販社が作成した通信仕様書という事です。
A4の紙一枚しか用意しないT芝みたいな所もあるのです。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -