Текущий архив: 2004.03.09;
Скачать: CL | DM;
Вниз
C ==> Pascal Найти похожие ветки
← →
Pat (2004-02-25 21:01) [0]Переведите, пожалуйста, в Паскаль...
define HASHLEN 16
typedef char HASH[HASHLEN];
#define HASHHEXLEN 32
typedef char HASHHEX[HASHHEXLEN+1];
#define IN
#define OUT
.................................
void CvtHex(
IN HASH Bin,
OUT HASHHEX Hex
)
{
unsigned short i;
unsigned char j;
for (i = 0; i < HASHLEN; i++) {
j = (Bin[i] >> 4) & 0xf;
if (j <= 9)
Hex[i*2] = (j + "0");
else
Hex[i*2] = (j + "a" - 10);
j = Bin[i] & 0xf;
if (j <= 9)
Hex[i*2+1] = (j + "0");
else
Hex[i*2+1] = (j + "a" - 10);
};
Hex[HASHHEXLEN] = "\0";
};
← →
Defunct (2004-02-25 21:14) [1]
Const HashLen = 16;
HashHexLen = 32;
Type Hash = Array[0..HashLen] of Char;
HashHex = Array[0..HashHexLen] Of Char;
.............
Procedure CvtHex(Bin : Hash; var Hex : HashHex);
Var I:Integer;
J:Byte;
Begin
For I:=0 To Hashlen-1 Do
Begin
J := Bin[i] and $F;
If J<=9 Then Hex[i*2] := Char(j+$30)
Else Hex[i*2] := Char(j+Byte("A")-10));
J := Bin and $F;
If J<=9 Then Hex[i*2+1] = Char(j+$30)
Else Hex[i*2+1] = Char(j+Byte("A")-10);
Hex[HashHexLen] := #0;
End;
End;
← →
jack128 (2004-02-25 21:16) [2]
> Hash = Array[0..HashLen - 1] of Char;
> J := (Bin[i] shr 4) and $F;
← →
Defunct (2004-02-25 21:16) [3]Опс.. обшибся..
Type Hash = Array[0..HashLen] of Byte;
и тут:
For I:=0 To Hashlen-1 Do
Begin
J := (Bin[i]>4) and $F;
← →
jack128 (2004-02-25 21:20) [4]
> Defunct © (25.02.04 21:16) [3]
Не знаю насколько верны твои исправления ;-) Лудше скажи с чего Hex по ссылке передаешь??
← →
Defunct (2004-02-25 21:20) [5]jack128 © (25.02.04 21:16) [2]
Спасибо, что поправили! Я что-то пропустид ">>" показалось ">"
← →
Defunct (2004-02-25 21:22) [6]> Лудше скажи с чего Hex по ссылке передаешь??
Я так понял Hex это то, что возвращается после преобразования, иначе какой смысл этой функции, вот Var и влепил
← →
jack128 (2004-02-25 21:27) [7]
> Я так понял Hex это то, что возвращается после преобразования,
> иначе какой смысл этой функции, вот Var и влепил
Не-е-е , так дело не пойдет...ПО смыслу может и так, а вот по синтексису где это видно??
← →
Defunct (2004-02-25 21:43) [8]> Не-е-е , так дело не пойдет...ПО смыслу может и так, а вот по синтексису где это видно??
Здесь:
void CvtHex(IN HASH Bin, OUT HASHHEX Hex )
← →
Defunct (2004-02-25 21:44) [9]Как иначе на паскале реализовать OUT, если не через VAR?
← →
jack128 (2004-02-25 21:55) [10]OUT пустое место см
> #define OUT
в си передача по ссылке пишится так
void CvtHex(
IN HASH Bin,
OUT HASHHEX &Hex
)
← →
Gero (2004-02-25 21:56) [11]> Defunct © (25.02.04 21:44) [9]
А Out не подойдет?
← →
Verg (2004-02-25 22:00) [12]
> в си передача по ссылке пишится так
> void CvtHex(
> IN HASH Bin,
> OUT HASHHEX &Hex
> )
Ссылочный тип есть в С++.
Переменная типа массив - это всегда ее (его, массива) адрес, за исключением пожалуй операции sizeof.
char a[10] - sizeof a =10
char *a - sizeof a = sizeof(char*)
Хотя и там и там одинаково допускается операция индексирования ( [])
← →
Verg (2004-02-25 22:11) [13]С передачей параметров в процедуру - порядок, за исключением того, что надо бы и у первого массива поставить var
Ну и "пустячок" такой:
> Type Hash = Array[0..HashLen -1] of Char;
> HashHex = Array[0..HashHexLen] Of Char;
← →
Pat (2004-02-25 23:33) [14]Всем бо-о-о-о-о-льшое спасибо :-) Все теперь стало на свои места. Практически :-((
Вобщем, эта процедура - аналог функции:
function MD5DigestToStr(const Digest: TMD5Digest): string;
var
i: Integer;
begin
Result:="";
for i:=0 to 15 do Result:=Result+LowerCase( IntToHex(Digest.v[i], 2));
end;
Страницы: 1 вся ветка
Текущий архив: 2004.03.09;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.008 c