Q&A

  • 홀수 패리티 방식 함수좀 봐주세요.
일전에 홀수 패리티 방식 함수를 이곳에서 정보를 얻어 응용을 했었는데요..

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 값이 들어가면 계산이 제대로 안되는거 같은데..
2  COMMENTS
  • Profile
    최용일 2009.11.11 21:47
    입력값에 따라서 결과가 다르게 나올것 같네요...
    코드를 보면 입력값 5012400000001B이 순수하게 이진코드가 들어와야 하는데 입력을 아스키문자열로 하시는것 같습니다.
    S1 := '5012400000001B';
    S2 := #$50#$12#$40#$00#$00#$00#$1B
    위 두개의 입력값은 전혀 다른 값입니다. 님께서 원하시는 결과를 얻으실려면 두번째 형식으로 입력을 해야될것 같네요...
    함수 자체는 별 문제 없어 보입니다.
  • Profile
    따따부따 2009.11.11 22:57
    최용일님 정말 감사드립니다.

    해당 사항은 말씀해주신 내용에 힌트를 얻어

    S2 := #$5#$0#$1#$2#$4#$0#$0#$0#$0#$0#$0#$0#$1#$B

    방식으로 변환하니 정상적으로 계산이 됩니다.

    거듭 감사드립니다.