c# - ASTM 校验和计算

标签 c# asp.net

我需要了解设备如何计算以下 ASTM 字符串的校验和

<STX2P|1|||||||||||||||||||||||||||||||||<CR><ETX>3B<CR><LF>

该字符串显示校验和为“3B”,而我试图通过下面的代码查找校验和

    public static string ConvertStringToHex(string asciiString)
    {
        string hex = "";
        foreach (char c in asciiString)
        {
            int tmp = c;
            hex += String.Format("{0:x2}", (uint)System.Convert.ToUInt32(tmp.ToString()));
        }
        return hex;
    }

但我得到“3C”作为输出。请帮助我如何找到校验和。

最佳答案

检查此链接:https://www.hendricksongroup.com/code_003.aspx 它解释得很好。确保在 STX 之后使用加载数据并包括 ETX。 例如。在下面的行中:

<STX><Frame Data><CR><ETX><CHECKSUM 1><CHECKSUM 2><CR><LF>

使用这部分数据来计算MOD 256校验和

<Frame Data><CR><ETX>

(将所有加载字符相加并以 256 为模)

编辑

很少有网站可以计算 mod 256(以及其他)校验和。例如:https://www.scadacore.com/tools/programming-calculators/online-checksum-calculator/

我们以问题中使用的字符串为例:

<STX2P|1|||||||||||||||||||||||||||||||||<CR><ETX>3B<CR><LF>

由于字符串不正确,STX后没有结束>,w更正它,尽管它与校验和计算无关。

<STX>2P|1|||||||||||||||||||||||||||||||||<CR><ETX>3B<CR><LF>

现在,ASTM 1381中的校验和使用校验和之后和之前的数据,包括,这部分:

P|1|||||||||||||||||||||||||||||||||<CR><ETX>

让我们转到该站点并将字符串粘贴到“ASCII 输入”文本字段中。由于它们是二进制数据的替换,无法显示为 ASCII 文本,REMOVE <CR><ETX>然后按按钮AnalyseDataAscii。您将在下面看到计算的校验和,这是错误的,因为数据丢失 <CR><ETX> 。忽略第一个校验和。

enter image description here

十六进制输入文本字段也已更新并以十六进制表示法显示二进制数据。因此添加 <CR><ETX> 的数据在十六进制输入中的十六进制字符串的末尾。在十六进制中,CR 为 0D,ETX 为 03,因此添加 0D03,然后按另一个按钮 AnalyseDataHex:

enter image description here

现在您可以看到正确的校验和,确实是 3B,与消息示例中的完全相同。 显然,问题作者提供的代码使用了不正确的字符串部分,并且没有用十六进制表示替换占位符。

关于c# - ASTM 校验和计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40838240/

相关文章:

c# - 当我使用 Entity Framework 和 CodeFirst 方法将父实体的值设置为 null 时,如何从数据库中删除相关的子实体?

C#如何判断一个日期是否在距现在180天以内

c# - LINQ 语句中的多个 OR 子句

c# - 干净编译,但运行时错误 : ASP. NET CS1513:} 页面上的预期错误

javascript - 从下拉列表中选择除一个以外的所有选项

asp.net - 使用RequiredFieldValidator 检查两个文本框中至少之一是否包含一些文本?

C# WPF 将 List<T> 与 Datagrid.ItemsSource 进行比较

c# - 如何在 ItemUpdating 事件期间更改字段值

asp.net - ListView 的 EditTemplate 不适用

c# - 如何将鼠标悬停在一个分区上的鼠标指针更改为手?