일전에 홀수 패리티 방식 함수를 이곳에서 정보를 얻어 응용을 했었는데요..
function OddParity(const Source: string): string;
const
ParityCounts: array[0..15] of Integer = (
0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4);
var
Index, Count: Integer;
begin
Result := '0';
Count := 0;
for Index := 1 to Length(Source) do
begin
Inc(Count, ParityCounts[Byte(Source[Index]) and $0F]);
Inc(Count, ParityCounts[(Byte(Source[Index]) and $F0) shr 4]);
end;
if (Count mod 2) = 0 then
Result := '1';
end;
해당 함수를 썼을때 비정상적으로 산출되는 코드가 있습니다.
5012400000001B -> 5012400000001B0 이 되야 하는데 해당 함수를 쓰면
5012400000001B1 이 나옵니다....
확인결과 몇개의 코드가 오류가 나는 경우가 있는데 함수의 어떤부분이 잘못됐는지 모르겠습니다.
HEX 값이 들어가면 계산이 제대로 안되는거 같은데..
코드를 보면 입력값 5012400000001B이 순수하게 이진코드가 들어와야 하는데 입력을 아스키문자열로 하시는것 같습니다.
S1 := '5012400000001B';
S2 := #$50#$12#$40#$00#$00#$00#$1B
위 두개의 입력값은 전혀 다른 값입니다. 님께서 원하시는 결과를 얻으실려면 두번째 형식으로 입력을 해야될것 같네요...
함수 자체는 별 문제 없어 보입니다.