-19 / 12 / 3
Регистрация: 01.04.2009
Сообщений: 474
1

Методика расчета контрольной суммы

04.06.2022, 22:27. Показов 740. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Уважаемые программисты.
Подскажите пожалуйста на пальцах методику расчета контрольной суммы
Программа должна считать контрольные суммы последовательных 128кБайтных блоков и записывать эти контрольные суммы по адресам указанным по смещению 0x0020D9AC Сумма представляет из себя 8 байт для каждого такого блока
Меня интересует как программа рассчитывает эти 8 байт
Сам я не программист, но понять этот момент мне необходимо

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
using Microsoft.Win32;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
 
namespace XXXXXXx
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public byte[] input;
        public MainWindow()
        {
            InitializeComponent();
        }
 
        private void Open_Click(object sender, RoutedEventArgs e)
        {
            OpenFileDialog openFileDialog = new OpenFileDialog();
            if (openFileDialog.ShowDialog() == true)
            {
 
                txtEditor.Text += "reading file " + openFileDialog.FileName + "\n";
                input = File.ReadAllBytes(openFileDialog.FileName);
 
                uint start_offset = 0;
                for (int rom_no = 0; rom_no < 48; rom_no++)
                {
                    uint crc_offset = SwapBytes(BitConverter.ToUInt32(input, 0x0020D9AC + rom_no * 4));
                    uint end_offset = (uint)(0x20000 * (rom_no + 1));
                    byte[] checksum = new byte[9];
                    for (int count = 0; count < (end_offset - start_offset) / 8; count++)
                    {                        
                        for (int index = 0; index < 8; index++)
                        {
                            checksum[index] += input[start_offset + count * 8 + index];
                        }
                    }
                    for (int index = 0; index < 8; index++) checksum[8] += checksum[index];
                    txtEditor.Text += "ROM " + (rom_no * 2).ToString("X2") + "1  " + BitConverter.ToString(checksum) + "  0x" + crc_offset.ToString("X") + "\n";
                    start_offset = end_offset;
                }
            }
            scrollviewer.ScrollToEnd();
        }
        public uint SwapBytes(uint x)
        {
            return ((x & 0x000000ff) << 24) +
                   ((x & 0x0000ff00) << 8) +
                   ((x & 0x00ff0000) >> 8) +
                   ((x & 0xff000000) >> 24);
        }
    }
}
Добавлено через 2 часа 19 минут
Ну, например как считается первый байт контрольной суммы 128кБайтного блока?
Как второй байт, как восьмой? Может кто-нибудь понять по этому листингу?

Добавлено через 1 час 45 минут
Ну что там хоть делается? Все данные блока складываются подряд или что еще?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.06.2022, 22:27
Ответы с готовыми решениями:

Расчета контрольной суммы MD5 (хеширование)
Помогите с процедурой для , ___ где вопросительные знаки нужно вставить процедуру:wall: ...

Расчет контрольной суммы
Правильно ли я понимаю задание? Настройки com порта стандартные: 9600, 1 стартовый бит, 8 бит...

Проверка контрольной суммы
нашел код для проверки контрольной суммы. Какие действия он выполняет, если пришли &quot;битые данные&quot;,...

Проверка контрольной суммы РНН
Добрый день, уважаемые читатели форума. Суть вопроса: РНН представляет собой 12-тиразрядное...

2
1972 / 1406 / 365
Регистрация: 26.06.2017
Сообщений: 3,993
06.06.2022, 08:37 2
Цитата Сообщение от Viktor2004 Посмотреть сообщение
Подскажите пожалуйста на пальцах методику расчета контрольной суммы
По моему очень доходчиво написано. А чтобы было понятно откуда ноги растут читаем тут.
0
-19 / 12 / 3
Регистрация: 01.04.2009
Сообщений: 474
06.06.2022, 09:41  [ТС] 3
Лучший ответ Сообщение было отмечено Элд Хасп как решение

Решение

Цитата Сообщение от Uswer Посмотреть сообщение
А чтобы было понятно откуда ноги растут
Спасибо. Но дъявол кроется в деталях. Я не смог разобраться с листингом C#, но мне помогла трассировка этого кода в VS2015. Там специфический подсчет методику которого я и хотел узнать. Узнал в процессе трассировки.
Тему можно закрывать. Описывать тут ответ наверное будет излишним, так как задача специфическая и вряд ли она кому еще пригодится именно эта.

Добавлено через 9 минут
Хотя, могу и написать
Там первый байт блока складывается с восьмым, шестнадцатым и так далее до конца блока. Результат заносится в первый байт контрольной суммы.
Второй байт блока складывается с девятым, семнадцатым и так далее до конца блока. Результат заносится во второй байт контрольной суммы.
И так далее до восьмого байта
Потом все эти восемь байтов контрольной суммы складываются и записываются в девятый байт контрольной суммы
В итоге получает 9 байтов
Затем берется второй 128кБайтный блок, все то же самое проделывается с ним. Получаем еще 9 байт
И так все 48 блоков
Так работает этот алгоритм
1
06.06.2022, 09:41
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.06.2022, 09:41
Помогаю со студенческими работами здесь

Вычисление 8-и битных контрольной суммы
Доброго времени суток господа! Нужна ваша помощь. Есть функция на Си для вычисления 8-и битных...

Проверка контрольной суммы crc8
народ, подскажите как сделать проверку контрольной суммы допустим поступают байты: 170 7 0 0 7 102...

Код по алгоритму. Расчет контрольной суммы
Помогите написать код по этому алгоритму. 1) Пользователь может выбрать ввод 8-ми или на...

Передача данных по COM-порту. Подсчет контрольной суммы
Здравствуйте! помогите перевести с языка ПАСКАЛЬ на C# Способ подсчета контрольной суммы. 1. ...

Вычисление контрольной суммы файлов в отдельных потоках
Помогите,пожалуйста,искал в интернете,что то подобное,толком ничего не нашел. само задание:...

Подсчет контрольной суммы файла по CRC32: разобрать код
Здравствуйте. Есть вот этот код, суть его в том, что вбивается название файла, подсчитывается...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru