2014-11-11 10 views
0

15 바이트를 초과하는 1 바이트 체크섬을 계산해야합니다. 내 첫 번째 아이디어는 crc8과 같은 것을 사용하는 것이지만 문제는 기본적인 산술 연산 (+ - * /)을 지원하지만 bitwise "xor", "and"or "or"을 지원하지 않는 제한된 기본 인터프리터를 사용해야한다는 것이다. "이동"조작이 없습니다.로직/비트 단위 연산이없는 체크섬

제 질문은 다음과 같습니다. 이러한 제한 사항으로 다소 합리적인 체크섬을 계산할 수 있습니까? 나는 합계를 계산하는 것이 좋지 않은 해결책이라고 생각하지만 지금은 다른 것을 생각할 수 없다.

+0

필자가 설명한 라인을 따라 한계를 지닌 여러 레거시 시스템은 실제로 값의 간단한 합계 인 하위 바이트를 체크섬으로 사용했습니다. 나는 그 단어가 그 사용에서 왔을지도 모른다라고 생각한다 : –

답변

2
LET a = 1 
LET b = 0 
FOR n = 1 to 15 
    LET a = a + c(n) 
    LET b = b + a 
NEXT n 
LET b = mod(b, 251) 

그런 다음 체크 값으로 b을 사용하십시오. 이것의 장점은 단순한 것보다 교환 할 수 없다는 것입니다. 바이트 순서가 중요합니다. 또한 0의 문자열은 당신에게 0을주지 않으며, 체크 값은 몇개의 0에 의존합니다.

2

정수 나누기를 자르면 mod (a, b) = a - (a/b) * b를 정의 할 수 있습니다. 이는 거의 모두 http://en.wikipedia.org/wiki/Adler-32에 필요합니다.

+3

그것이 내가 사용할 것 인 That 's. :-) –

+0

@MarkAdler : 예,하지만 편견 일 가능성이 있습니다;) –

+0

유죄로 청구됩니다. –