Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++] Сложить все байты в одной строке 
:(
    Опции темы
mrbin
Дата 28.11.2010, 21:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 28.11.2010

Репутация: нет
Всего: нет



Здравствуйте. Чесно полазив в Интернете и спросив у гугла, так и не понял как можно сложить байты

есть строка 8d79e0be803ac66784fbdbd0 нужно получить сумму в шеснатеричном виде ,

 т.е. 8d+79+e0+be+80+3a+c6+67+84+fb+db+d0 = ..


Код

#include <stdio.h>
#include <string.h>
#include <ctype.h>

unsigned char crc(unsigned char *pcBlock){
   unsigned char crc = 0x00;

   while ....
                  // что тут написать?
   }
   return crc;
}

void main (int argc, char *argv[]){
    if (argc == 2){
        printf("=%x\n",crc(argv[1]));
    }
}

PM MAIL   Вверх
mes
Дата 28.11.2010, 21:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: нет
Всего: 250



если строка нуль-терминорованная, то инкрементировать указатель, пока не дойдете до нуля..
иначе нужна длина строки.. 


--------------------
PM MAIL WWW   Вверх
bsa
Дата 28.11.2010, 22:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 1
Всего: 196



mrbin
Код
while(*pcBlock)
   crc += *pcBlock++;

PM   Вверх
mrbin
Дата 29.11.2010, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 28.11.2010

Репутация: нет
Всего: нет



фигня какаето (простите) получается
>./a.out 00
>=60

>./a.out 0000
=c0

PM MAIL   Вверх
bsa
Дата 29.11.2010, 11:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 1
Всего: 196



mrbin, гы. Я что-то подумал, что тебе именно строку нужно, а не 16-тиричный дамп...
тогда в цикле берешь текущий символ, преобразуешь его в десятичный (0 -> 0, ..., 9 -> 9, a -> 10, ..., f -> 15), умножаешь на 1 или 16 (в зависимости от текущего положения - если счетчик четный, то 16) и прибавляешь к crc.
PM   Вверх
mrbin
Дата 29.11.2010, 12:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 28.11.2010

Репутация: нет
Всего: нет



алгоритм мне понятен, вот только пишу я здесь ибо в Си полный профан
PM MAIL   Вверх
bsa
Дата 29.11.2010, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 1
Всего: 196



mrbin, если хочешь, чтобы писали за тебя, то тебе в другой раздел. Здесь только помогают советом - код писать тебе.
PM   Вверх
mes
Дата 29.11.2010, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: нет
Всего: 250



еще поиск по форуму поможет.. недавно была тема, где есть примеры перевода стоки шестнадцатиричных чисел..



--------------------
PM MAIL WWW   Вверх
mrbin
Дата 29.11.2010, 13:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 28.11.2010

Репутация: нет
Всего: нет



 smile весёлый форум
PM MAIL   Вверх
bsa
Дата 29.11.2010, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 1
Всего: 196



Для домашних заданий, курсовых, существует "Центр Помощи".

Тема перенесена! 
PM   Вверх
Леопольд
Дата 30.11.2010, 08:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 943
Регистрация: 17.6.2009

Репутация: нет
Всего: 13



Код

#include <stdio.h>
#include <assert.h>
#include <stdlib.h>

void main (int argc, char *argv[]){
    
    char repr[] = "ff";

    char * end_p = NULL;
    unsigned long n = strtoul(repr, end_p, 16);
    assert(end_p == NULL && "invalid hex");

    printf("%x\n",n);

    return 0;
}
http://codepad.org/Vh3sGwgI

Это сообщение отредактировал(а) Леопольд - 30.11.2010, 08:46


--------------------
вопросов больше чем ответов
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0524 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.