Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 29.11.2012, 17:33
AlexMPEI AlexMPEI вне форума
Прохожий
 
Регистрация: 25.08.2009
Сообщения: 4
Репутация: 10
По умолчанию помогите перевести код с С на Delphi

вот исходный код на С. Помогите сделать из него ф-ю Delphi со string на входе

Код:
uint16_t WordCrc16 (uint8_t *Data, uint16_t size)
{
uint16_t w;
uint8_t shift_cnt,f;
uint8_t *ptrByte;
uint16_t byte_cnt = size;
ptrByte = Data;
w = (uint16_t)0xffff;
for (;byte_cnt>0;byte_cnt--)
{
w = (uint16_t)(w^(uint16_t)(*ptrByte++));
for (shift_cnt = 0; shift_cnt<8; shift_cnt++)
{
f=(uint8_t)((w)&(0x1));
w>>=1;
if ((f) ==1)
w = (uint16_t)((w)^0xa001);
}
}
return w;
}
Ответить с цитированием
  #2  
Старый 29.11.2012, 17:47
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от AlexMPEI
вот исходный код на С. Помогите сделать из него ф-ю Delphi со string на входе

Код:
uint16_t WordCrc16 (uint8_t *Data, uint16_t size)
{
uint16_t w;
uint8_t shift_cnt,f;
uint8_t *ptrByte;
uint16_t byte_cnt = size;
ptrByte = Data;
w = (uint16_t)0xffff;
for (;byte_cnt>0;byte_cnt--)
{
w = (uint16_t)(w^(uint16_t)(*ptrByte++));
for (shift_cnt = 0; shift_cnt<8; shift_cnt++)
{
f=(uint8_t)((w)&(0x1));
w>>=1;
if ((f) ==1)
w = (uint16_t)((w)^0xa001);
}
}
return w;
}
Примерно так (только проверь - может где ошибся):
Код:
function WordCrc16(const Data: AnsiString): Word;
var
  w: Word absolute Result;
  shift_cnt, f: Byte;
  ptrByte: PByte;
  byte_cnt: Integer;
begin
  byte_cnt := Length(Data);
  ptrByte := Pointer(Data);
  w := $FFFF;
  while byte_cnt > 0 do
  begin
    w := w xor ptrByte^;
    Inc(ptrByte);
    for shift_cnt := 1 to 8 do
    begin
      f := w and $1;
      w := w shr 1;
      if f = 1 then w := w xor $A001;
    end;
    Dec(byte_cnt);
  end;
end;
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 17:44.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter