function CRCode (msg:string, len:integer):integer
Begin
crc,j: Integer;
crc := 0;
while len-1 > 0 do
Begin
crc = crc ^ (int) *msg++ << 8; //вот с этим я затрудняюсь придумать что сделать..., наверно надо делать вставку на асме
for j:=0 to 7 do
begin
if (crc AND $8000)<>0 then crc:= shl(crc,1)^$1021
else crc := shl (crc,1);
end
End
CRCode := crc;
End
crc = crc ^ (int) *msg++ << 8; //вот с этим я затрудняюсь придумать что сделать..., наверно надо делать вставку на асме
Переведите: что требуется от этой строчки?
Увеличение / уменьшение в TurboPascal на 1 (только для целых чисел) - это inc(n) / dec(n), возведение в степень вообще реализуется через цикл или ln, переменные описываются после слова var. Как с другими диалектами - не знаю.
crc = crc ^ (int) *msg++ << 8; //вот с этим я затрудняюсь придумать что сделать..., наверно надо делать вставку на асме
Переведите: что требуется от этой строчки?
Увеличение / уменьшение в TurboPascal на 1 (только для целых чисел) - это inc(n) / dec(n), возведение в степень вообще реализуется через цикл или ln, переменные описываются после слова var. Как с другими диалектами - не знаю.
^ -- это побитовое XOR.
<< -- это битовый сдвиг.
<< 8 вообще-то эквивалентно умножению на два в восьмой степени.
function CRCode( msg:String ):Integer
var
len, crc, j, i:Integer;
begin
len := length( msg );
crc := 0;
i := 1;
while( i <= len )
begin
crc := crc xor ( Integer( ord( msg[i] ) ) shl 8 ); { Вот тут мог напутать. Не уверен, что в паскале так можно типы приводить. Да и про эти xor, and и прочее не уверен. Давно на паскале не писал :) }
for j := 0 to 7 do
begin
if( ( crc and 8000h ) <> 0 ) then
crc = ( crc shl 1 ) xor 0x1021
else
crc = crc shl 1;
end;
inc( i );
end;
return crc;
end;