Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [C++] Сложить все байты в одной строке


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

есть строка 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]));
    }
}

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

Автор: bsa 28.11.2010, 22:10
mrbin
Код
while(*pcBlock)
   crc += *pcBlock++;

Автор: mrbin 29.11.2010, 11:30
фигня какаето (простите) получается
>./a.out 00
>=60

>./a.out 0000
=c0

Автор: bsa 29.11.2010, 11:59
mrbin, гы. Я что-то подумал, что тебе именно строку нужно, а не 16-тиричный дамп...
тогда в цикле берешь текущий символ, преобразуешь его в десятичный (0 -> 0, ..., 9 -> 9, a -> 10, ..., f -> 15), умножаешь на 1 или 16 (в зависимости от текущего положения - если счетчик четный, то 16) и прибавляешь к crc.

Автор: mrbin 29.11.2010, 12:08
алгоритм мне понятен, вот только пишу я здесь ибо в Си полный профан

Автор: bsa 29.11.2010, 13:08
mrbin, если хочешь, чтобы писали за тебя, то тебе в другой раздел. Здесь только помогают советом - код писать тебе.

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

Автор: mrbin 29.11.2010, 13:51
 smile весёлый форум

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

Тема перенесена! 

Автор: Леопольд 30.11.2010, 08:41
Код

#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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)