안녕하십니까..
델파이로 프로그램을 짜고 있는데 아직 초보라 델파이 문법이 많이 헷갈리는 군요..
c로 된 함수는 아래와 같고
unsigned char buf[14];
buf[0]=a5;
...
buf[13] = make( buf,13)
unsigned char make(unsigned char* p, short len)
{
short i;
unsigned char BCC = 0;
for (i = 0; i < len; ++i)
{
BCC ^= *p++;
}
return BCC;
}
과 같이 되어있는 것을 델파이로 변환하고 싶은데
function MakeBcc(P: PByte; length: SmallInt) : Char;
var i: SmallInt;
BCC : Byter;
begin
BCC := 0;
i:=0;
while i < length do
begin
BCC := (BCC) xor P^;
Inc(P)
end;
RESULT := BCC;
end;
와 같이 변환한게 맞는지 궁금합니다..
하드웨어 제어를 하고 계시군요.
마그네틱카드나, IC카드 제어할때 주로 쓰이는 루틴입니다.
임베드하드웨어 땜쟁이들이 BCC라는 무식한 체크섬을 두고 있죠.
원래 라이브러리가 C로 되어 있을겁니다.
변환 하시기 구찬겐네요.
아마도 작동이 정상적이지 않아 BCC생성 함수에 의문이 가시나 본데...
아래와 같이 하십시오.
FUNCTION MAKEBCC(S :STRING; LEN :INTEGER) : BYTE;
VAR I, BCC :INTEGER;
BEGIN
BCC := 0;
FOR I:=1 TO LEN DO BCC := BCC XOR S[I];
RESULT := BCC;
END;
전 문자열형을 썼는데, 이게 아마도 편할 겁니다.
PChar형은 필요할때만 변환해서 쓰는게 편하니깐요.
굳이 Pointer형이라면 아래와 같습니다요.
TYPE
PB :^Byte; //PointerByte약자 <== 이렇게 선언부터 하세요.
FUNCTION MAKEBCC(S :PB; LEN :INTEGER) : BYTE;
VAR I, BCC :INTEGER;
BEGIN
BCC := 0;
FOR I:=1 TO LEN DO BEGIN
BCC := BCC XOR S^;
INC(S);
END;
RESULT := BCC;
END;
위와 같이 하면 됩니다.
물론 버퍼내용이 PB형이여야 겠죠.
아니면 일반 Void형태의 포인터라도 상관 없습니다.. 포인터형이면 됨.
도움이 되었기를...