![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Sooto |
|
|||
|
Unregistered |
Здравствуйте!
Столкнулся с такой проблемой... Существует массив char шестнадцатеричных чисел. Необходимо вычислить его контрольную сумму и дописать в конец массива. Сумму посчитал - не могу сообразить, как дописать к массиву... Перерыл/перепробовал кучу всего - не получается! Кажется, что решение простое, а кручусь вокруг, да около, не могу наткнуться :-) -------------------------------------------------- char dss[] = {0x0A,0x00,0x01}; int dssLen=sizeof(dss)/sizeof(char); WORD crc = 0; for(int i=0;i<dssLen;++i,crc+=dss[i]); -------------------------------------------------- Посоветуйте, будьте добры? Спасибо... |
|||
|
||||
| Mayk |
|
||||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: 45 Всего: 134 |
Без заведения нового массива никак.
А если массив dss был динамическим(созданным через malloc/calloc, но НЕ через new/alloca), то можно так:
-------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
||||
|
|||||
| codelord |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 777 Регистрация: 7.5.2005 Где: ты моя темноглаза я где?! Репутация: 1 Всего: 39 |
У меня твоя такая конфикурация не заработала:
for(int i=0;i<dssLen;++i,crc+=dss[i]); Без создания нового массива я тоже обойтись не смог, т.е почти массива. в переделанном коде ниже (уверен что не самом красивом) в указателе u, твой массив с дописаным crc.
хотя можно попробовать вернуть значение u твоему dss; Это сообщение отредактировал(а) codelord - 26.6.2005, 12:56 |
|||
|
||||
| Mayk |
|
|||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: 45 Всего: 134 |
В исходной строке встречается ноль - завершающий символ строки. Поэтому AnsiString(dss).c_str() = {0x0A, 0x00}, а не {0x0A, 0x00, 0x01}. -------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
|||
|
||||
| Sooto |
|
|||
|
Unregistered |
Mayk
Собственно, я так и пробовал - через новый массив: (с учётом Вашего совета) ----------------------------------------------- char dss[] = {0x76,0x0A,0x00,0x00}; int dssLen=sizeof(dss)/sizeof(char); WORD crc = 0; for(int i=0;i<dssLen;++i,crc+=dss[i]); char dts[50]; memcpy(dts,dss,dssLen); *((int*)&dts[dssLen])=crc; ----------------------------------------------- К сожалению, не получилось В массив дописываются значения, но не то.. В дебаггере посмотрел номера символов - отрицательные. codelord Ваш пример совсем не работает... Работаю в Visual C 6.0? |
|||
|
||||
| NiJazz |
|
|||
![]() Jazz coder ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2286 Регистрация: 10.8.2003 Где: Москва Репутация: 1 Всего: 23 |
Пример программы:
|
|||
|
||||
| Guest |
|
|||
|
Unregistered |
Спасибо откликнувшимся!
Вопрос закрыт :-) |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |