Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.76
OlVD
0 / 0 / 0
Регистрация: 10.07.2012
Сообщений: 29
#1

32х битная чексумма - C++

04.11.2012, 19:45. Просмотров 2103. Ответов 10
Метки нет (Все метки)

есть задание:
консольная программа:
test -f Test.tst -m checksum
печатает 32-хбитную чексумму, рассчитанную по алгоритму checksum = word1 + word2 + … + wordN (word1..wordN – 32-хбитные слова, представляющие содержимое файла)

Кажется, я немного не понимаю, что от меня хотят.
если делать так:
C++
1
2
3
4
long cell = 0;
    file.read((char*)&cell, 4);
    checksum += cell;
    file.close();
То считает с пробелами. Может стоит сделать так:
C++
1
2
3
for (int i=0; i < test.size(); ++i){
    checksum += test[i] << (4 - i%4);
}
где vector<char> test(begin, end);
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.11.2012, 19:45     32х битная чексумма
Посмотрите здесь:

9-ти битная передача через COM port - C++
братцы вопрос такой, как мне собственно реализовать девятибитную передачу через ком порт?) bool SerialPort::CreateCOM(string name) {...

Не компилируется 64-битная DLL из 32-битного проекта - C++
Добрый день! У меня есть проект MS VS2010 Prof+WinDDK7600, 32-битная DLL принтпроцессора. Во время печати спулер системы ее...

64 битная архитектура - C++ Builder
А как сделать, чтобы программа, сделанная в C++, работала с 64 битной архитектурой?

битная обработка - Assembler
Задано 3 однобайтовых чисел. Установить 3 старших и 2 младшие разряды в единицу

8-битная музыка - Музыка
:help: где можно скачать ваабще а то мои поиски ни к чему не привели :wall:

32-битная ОС против 64-битной - Windows 8, 8.1
Доброго времени суток всем! Такая вот проблема, у меня на ноуте установлена 32-битная ОС, проц х64, ввиду чего не запускаются некоторые...

OutOfMemory и 32'битная Java - Java
Доброго времени суток. Есть некая программа(игрушка), которая грузит в себя кучу разнообразных классов и текстур, за счет...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zvoronz
271 / 238 / 21
Регистрация: 29.05.2012
Сообщений: 889
04.11.2012, 19:53     32х битная чексумма #2
Контро́льная су́мма — некоторое значение, рассчитанное по набору данных путём применения определённого алгоритма и используемое для проверки целостности данных при их передаче или хранении. Также контрольные суммы могут использоваться для быстрого сравнения двух наборов данных на неэквивалентность: с большой вероятностью различные наборы данных будут иметь неравные контрольные суммы.

Не понимаю причём вам пробелы. В чексумму входят все байты файла. Пробел это тоже байт данных в файле.
OlVD
0 / 0 / 0
Регистрация: 10.07.2012
Сообщений: 29
04.11.2012, 19:56  [ТС]     32х битная чексумма #3
так как лучше?)
-=ЮрА=-
Заблокирован
Автор FAQ
04.11.2012, 19:59     32х битная чексумма #4

Не по теме:

OlVD, Wiki - код для src32



Добавлено через 2 минуты

Не по теме:

Собственно вот линк http://ru.wikipedia.org/wiki/Циклический_избыточный_код

Kastaneda
04.11.2012, 20:25
  #5

Не по теме:

OlVD, это случаем не тестовое задание в 2gis?

OlVD
0 / 0 / 0
Регистрация: 10.07.2012
Сообщений: 29
04.11.2012, 20:32  [ТС]     32х битная чексумма #6
оно самое)
Kastaneda
Форумчанин
Эксперт С++
4479 / 2841 / 227
Регистрация: 12.12.2009
Сообщений: 7,224
Записей в блоге: 1
Завершенные тесты: 1
04.11.2012, 20:41     32х битная чексумма #7

Не по теме:

Больше года уже задание не меняют



Цитата Сообщение от OlVD Посмотреть сообщение
где vector<char> test(begin, end);
вообще не вариант, а если файл будет 10 ГБ?
Цитата Сообщение от OlVD Посмотреть сообщение
C++
1
2
3
4
long cell = 0;
file.read((char*)&cell, 4);
checksum += cell;
file.close();
не факт, что long 4 байта, поэтому лучше подумать, как по другому сделать.

Помнится они делают упор на то, что хотели бы увидеть код именно на С++, поэтому приведение в стиле С убери, замени на static_cast<>()

Добавлено через 3 минуты
Цитата Сообщение от OlVD Посмотреть сообщение
так как лучше?)
Лучше открыть файл как бинарный и читать по 4 байта. Под словом "слово" в задании подразумевается машинное слово (хотя 32 битное), а не слово как набор букв, разделенных пробелами или знаками препинания.
OlVD
0 / 0 / 0
Регистрация: 10.07.2012
Сообщений: 29
04.11.2012, 20:55  [ТС]     32х битная чексумма #8
C++
1
2
3
    char ch[4];
    file.read(ch, 4);
    checksum += static_cast<int>(ch);
но static_cast не хочет срабатывать
Kastaneda
Форумчанин
Эксперт С++
4479 / 2841 / 227
Регистрация: 12.12.2009
Сообщений: 7,224
Записей в блоге: 1
Завершенные тесты: 1
04.11.2012, 21:05     32х битная чексумма #9
ну в этом случае естественно, вот так попробуй
C++
1
checksum += *(reinterpret_cast<int*>(ch));
только в данном случае нельзя забывать про порядок байтов, скорее всего это будет little-endian. Т.е. массив придется перевернуть перед преведением.
OlVD
0 / 0 / 0
Регистрация: 10.07.2012
Сообщений: 29
04.11.2012, 21:11  [ТС]     32х битная чексумма #10
ночью соображается туго, но смысл его переворачивать?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.11.2012, 21:27     32х битная чексумма
Еще ссылки по теме:

Что такое 32 битная машина и что такое 64 битная машина? - Компьютерное железо
глупо,конечно,но я не знаю что означает скажем у меня серв 2003 64 бит,что это такое?не знаю что в поисковниках бить чтобы прочитать....не...

64-битная работает медленней 32-битной - Windows 7
Добрый вечер, после установки windows 7 64-битной компьютер стал слишком медленно работать по сравнению с работой 32-битной системы той же...

Нет пункта 64 битная виндовс в VB - Эмуляторы
При создании гостевой машины,нет в списке выбора гостевых ОС ,64 битных систем, на другом ноуте установлена из того же экзешника и все...

32 битная служба в 64 битной системе - C++ WinAPI
Доброго времени суток. Возможно ли и всегда ли можно установить (запустить) 32 разрядную службу на 64 разрядной машине ? Или есть свои...

DevIL - 64-битная текстура не отображается - OpenGL
Есть библиотека DevIL. Она грузит текстуры. play_textura(IL_PNG, &quot;c/DEMO/m/MENU.png&quot;, &amp;imageFrame, GL_LINEAR); А вот устройство...


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

Или воспользуйтесь поиском по форуму:
Kastaneda
Форумчанин
Эксперт С++
4479 / 2841 / 227
Регистрация: 12.12.2009
Сообщений: 7,224
Записей в блоге: 1
Завершенные тесты: 1
04.11.2012, 21:27     32х битная чексумма #11
Потому что таков интеловский порядок байтов. На самом деле все логично - по младшему адресу лежит младший байт, по старшему старший.
C++
1
2
3
unsigned int n; //допустим unsigned int имеет размер 4 байта. 
unsigned char arr[4] = {0x1, 0x2, 0x3, 0x4};
n = *(reinterpret_cast<int*>(arr));
непосвященный человек может предположить, что n будет равно 0x1234, но это не так. n будет равно 0x4321, т.к. младший байт n считается с младшего адреса и т.д.

Поэтому и нужно перевернуть перед преведением.

Добавлено через 1 минуту
советую ознакомиться

Добавлено через 3 минуты
хотя перед разворотом массива советую все же проверить какой порядок байтов используется в машине. 100% это будет little-endian, но просто тем самым ты покажешь "свой" уровень профессионализма

Добавлено через 4 минуты
всего этого геммороя можно было бы избежать, если использовать С++11, там есть тип std::uint32_t, размер которого гарантировано равен 32 бита, но думаю это не то, что они хотели бы увидеть
Yandex
Объявления
04.11.2012, 21:27     32х битная чексумма
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru