CRC-32: Difference between revisions
Content added Content deleted
(6502 Assembly) |
(Applesoft BASIC) |
||
Line 246: | Line 246: | ||
{{out}} |
{{out}} |
||
<pre>CRC32 OF The quick brown fox jumps over the lazy dog is: 0414fa339</pre> |
<pre>CRC32 OF The quick brown fox jumps over the lazy dog is: 0414fa339</pre> |
||
=={{header|Applesoft BASIC}}== |
|||
===Implementation using Binary ASCII=== |
|||
<lang Applesoft BASIC> 0 DIM D$(1111):D$(0)="0":D$(1)="1":D$(10)="2":D$(11)="3":D$(100)="4":D$(101)="5":D$(110)="6":D$(111)="7":D$(1000)="8":D$(1001)="9":D$(1010)="A":D$(1011)="B":D$(1100)="C":D$(1101)="D":D$(1110)="E":D$(1111)="F" |
|||
1 Z$ = CHR$ (8) + CHR$ (8) + CHR$ (8) + CHR$ (8) + CHR$ (8) + CHR$ (8) + CHR$ (8) + CHR$ (8) + CHR$ (8) + CHR$ (8) |
|||
100 C$ = "00000000000000000000000000000000" |
|||
110 S$ = "The quick brown fox jumps over the lazy dog" |
|||
120 GOSUB 200"CRC32 |
|||
130 PRINT D$( VAL ( MID$ (C$,1,4)))D$( VAL ( MID$ (C$,5,4)))D$( VAL ( MID$ (C$,9,4)))D$( VAL ( MID$ (C$,13,4)))D$( VAL ( MID$ (C$,17,4)))D$( VAL ( MID$ (C$,21,4)))D$( VAL ( MID$ (C$,25,4)))D$( VAL ( MID$ (C$,29,4)))" "; |
|||
140 END |
|||
200 IF LEN (S$) = 0 THEN RETURN |
|||
210 GOSUB 280"XOR #$FFFFFFFF |
|||
220 FOR I = 1 TO LEN (S$) |
|||
230 R$ = "00000000" + MID$ (C$,1,24) |
|||
235 PRINT D$( VAL ( MID$ (C$,1,4)))D$( VAL ( MID$ (C$,5,4)))D$( VAL ( MID$ (C$,9,4)))D$( VAL ( MID$ (C$,13,4))); |
|||
236 PRINT D$( VAL ( MID$ (C$,17,4)))D$( VAL ( MID$ (C$,21,4)))D$( VAL ( MID$ (C$,25,4)))D$( VAL ( MID$ (C$,29,4)))" " MID$ (S$,I,1)Z$; |
|||
240 C = ASC ( MID$ (S$,I,1)):O$ = "": FOR B = 1 TO 8:K = INT (C / 2):O$ = STR$ (C - K * 2) + O$:C = K: NEXT B |
|||
250 A = ( MID$ (C$,25,1) < > MID$ (O$,1,1)) * 128 + ( MID$ (C$,26,1) < > MID$ (O$,2,1)) * 64 + ( MID$ (C$,27,1) < > MID$ (O$,3,1)) * 32 + ( MID$ (C$,28,1) < > MID$ (O$,4,1)) * 16 |
|||
251 A = ( MID$ (C$,29,1) < > MID$ (O$,5,1)) * 8 + ( MID$ (C$,30,1) < > MID$ (O$,6,1)) * 4 + ( MID$ (C$,31,1) < > MID$ (O$,7,1)) * 2 + ( MID$ (C$,32,1) < > MID$ (O$,8,1)) + A: GOSUB 300 |
|||
260 C$ = STR$ (( MID$ (R$,1,1) < > MID$ (T$,1,1))) + STR$ (( MID$ (R$,2,1) < > MID$ (T$,2,1))) + STR$ (( MID$ (R$,3,1) < > MID$ (T$,3,1))) + STR$ (( MID$ (R$,4,1) < > MID$ (T$,4,1))) |
|||
261 C$ = C$ + STR$ (( MID$ (R$,5,1) < > MID$ (T$,5,1))) + STR$ (( MID$ (R$,6,1) < > MID$ (T$,6,1))) + STR$ (( MID$ (R$,7,1) < > MID$ (T$,7,1))) + STR$ (( MID$ (R$,8,1) < > MID$ (T$,8,1))) |
|||
262 C$ = C$ + STR$ (( MID$ (R$,9,1) < > MID$ (T$,9,1))) + STR$ (( MID$ (R$,10,1) < > MID$ (T$,10,1))) + STR$ (( MID$ (R$,11,1) < > MID$ (T$,11,1))) + STR$ (( MID$ (R$,12,1) < > MID$ (T$,12,1))) |
|||
263 C$ = C$ + STR$ (( MID$ (R$,13,1) < > MID$ (T$,13,1))) + STR$ (( MID$ (R$,14,1) < > MID$ (T$,14,1))) + STR$ (( MID$ (R$,15,1) < > MID$ (T$,15,1))) + STR$ (( MID$ (R$,16,1) < > MID$ (T$,16,1))) |
|||
264 C$ = C$ + STR$ (( MID$ (R$,17,1) < > MID$ (T$,17,1))) + STR$ (( MID$ (R$,18,1) < > MID$ (T$,18,1))) + STR$ (( MID$ (R$,19,1) < > MID$ (T$,19,1))) + STR$ (( MID$ (R$,20,1) < > MID$ (T$,20,1))) |
|||
265 C$ = C$ + STR$ (( MID$ (R$,21,1) < > MID$ (T$,21,1))) + STR$ (( MID$ (R$,22,1) < > MID$ (T$,22,1))) + STR$ (( MID$ (R$,23,1) < > MID$ (T$,23,1))) + STR$ (( MID$ (R$,24,1) < > MID$ (T$,24,1))) |
|||
266 C$ = C$ + STR$ (( MID$ (R$,25,1) < > MID$ (T$,25,1))) + STR$ (( MID$ (R$,26,1) < > MID$ (T$,26,1))) + STR$ (( MID$ (R$,27,1) < > MID$ (T$,27,1))) + STR$ (( MID$ (R$,28,1) < > MID$ (T$,28,1))) |
|||
267 C$ = C$ + STR$ (( MID$ (R$,29,1) < > MID$ (T$,29,1))) + STR$ (( MID$ (R$,30,1) < > MID$ (T$,30,1))) + STR$ (( MID$ (R$,31,1) < > MID$ (T$,31,1))) + STR$ (( MID$ (R$,32,1) < > MID$ (T$,32,1))) |
|||
270 NEXT I |
|||
280 B$ = "": FOR B = 1 TO 32:B$ = B$ + STR$ (( MID$ (C$,B,1) < > "1")): NEXT B:C$ = B$ |
|||
290 RETURN |
|||
300 IF NOT T THEN DIM T$(255): FOR T = 0 TO 38: READ J: READ T$(J): NEXT T |
|||
310 IF LEN (T$(A)) THEN T$ = T$(A): RETURN |
|||
320 R = A:T$ = "": FOR B = 1 TO 8:N = INT (R / 2):T$ = MID$ ("01",R - N * 2 + 1,1) + T$:R = N: NEXT B:T$ = "000000000000000000000000" + T$ |
|||
330 FOR J = 0 TO 7 |
|||
340 X = VAL ( MID$ (T$,32,1)) |
|||
350 T$ = "0" + MID$ (T$,1,31) |
|||
360 IF X THEN B$ = "": FOR B = 1 TO 32:B$ = B$ + MID$ ("01",( MID$ (T$,B,1) < > MID$ ("11101101101110001000001100100000",B,1)) + 1,1): NEXT B:T$ = B$ |
|||
370 NEXT J |
|||
380 T$(A) = T$:T = T + 1 |
|||
390 RETURN |
|||
600 DATA171,01000001000001000111101001100000 |
|||
610 DATA247,00100011110110010110011110111111 |
|||
620 DATA95,11111011110101000100110001100101 |
|||
630 DATA217,11111111000011110110101001110000 |
|||
640 DATA213,11110110101110010010011001011011 |
|||
650 DATA179,01010010011010001110001000110110 |
|||
660 DATA141,10010011000010011111111110011101 |
|||
670 DATA90,10001011101111101011100011101010 |
|||
680 DATA224,10100000000010101110001001111000 |
|||
690 DATA187,01011100101100110110101000000100 |
|||
700 DATA169,10101111000010100001101101001100 |
|||
710 DATA60,00101111011011110111110010000111 |
|||
720 DATA128,11101101101110001000001100100000 |
|||
730 DATA36,00111100000000111110010011010001 |
|||
740 DATA235,00110111110110000011101111110000 |
|||
750 DATA229,11010000011000000001011011110111 |
|||
760 DATA77,00001000011011010011110100101101 |
|||
770 DATA167,01001000101100100011011001001011 |
|||
780 DATA1,01110111000001110011000010010110 |
|||
790 DATA119,11001110011000011110010010011111 |
|||
800 DATA96,01001101101100100110000101011000 |
|||
810 DATA158,00010111101101111011111001000011 |
|||
820 DATA68,01110001101100011000010110001001 |
|||
830 DATA56,00101000000000101011100010011110 |
|||
840 DATA193,11101100011000111111001000100110 |
|||
850 DATA87,11110101000011111100010001010111 |
|||
860 DATA160,11010110110101101010001111101000 |
|||
870 DATA2,11101110000011100110000100101100 |
|||
880 DATA30,11111010000011110011110101100011 |
|||
890 DATA7,10011110011001001001010110100011 |
|||
900 DATA26,11111101011000101111100101111010 |
|||
910 DATA85,00011011000000011010010101111011 |
|||
920 DATA15,10010000101111110001110110010001 |
|||
930 DATA201,11100010101110000111101000010100 |
|||
940 DATA188,11000010110101111111111110100111 |
|||
950 DATA0,00000000000000000000000000000000 |
|||
960 DATA238,01000111101100101100111101111111 |
|||
970 DATA181,10111011000010110100011100000011 |
|||
980 DATA114,10111110000010110001000000010000</lang> |
|||
===Using 6052 Assembly=== |
|||
<lang Applesoft BASIC> 0 HIMEM: 37230 |
|||
8A=37229:P$=" 'Q$L.L%BP#%GKSFGFB1LEZ*=!4E[-Z=!6EW-[=!TEX-W=!U-XHPR?MPN<!PJ)!7!U7!T7!607!49&^!U+!T+!6+!43 =!UIM7!U=!TI87!T=!6IC7!6=!4I 7!4/POAP;<D2(Q>5ZIYUZ0PV@" |
|||
9FORI=1TOLEN(P$):B$=MID$("D2A0--A6Q4Q5A8Q7Q8Q9R0M6--N3N4N6N8R7O2O4O6S1O7P7S4Q0--S7Q2S9U2X0J6X2X8N1A4G9T8X9U0H3H4Y0X6X7U6U7U8O5V0L5O8O9Y6Z2Z3Z5Z0Z1----J4",(ASC(MID$(P$,I))-32)*2+1,2):POKEA+I,(ASC(MID$(B$,1))-65)*10+ASC(MID$(B$,2))-48:NEXT |
|||
100 S$ = "THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG" |
|||
110 FOR I = 2 TO LEN (S$) |
|||
120 C = ASC ( MID$ (S$,I,1)) |
|||
130 C$ = CHR$ (C + 32 * (C > = ASC ("A") AND C < = ASC ("Z"))) |
|||
140 S$ = LEFT$ (S$,I - 1) + C$ + MID$ (S$,I + 1, LEN (S$) - I) |
|||
150 NEXT |
|||
155 PRINT MID$ (S$,1,0 * FRE (0)); |
|||
160 POKE 236, PEEK (131) |
|||
170 POKE 237, PEEK (132) |
|||
180 A = PEEK (236) + PEEK (237) * 256 |
|||
190 POKE 236, PEEK (A + 1) |
|||
200 POKE 237, PEEK (A + 2) |
|||
210 POKE 238, PEEK (A) |
|||
220 POKE 239,0 |
|||
230 FOR I = 250 TO 253 |
|||
240 POKE I,0 |
|||
250 NEXT |
|||
260 CALL 37230 |
|||
270 FOR I = 253 TO 250 STEP - 1 |
|||
280 B = PEEK (I) |
|||
290 FOR J = 0 TO 1 |
|||
300 PRINT MID$ ("0123456789ABCDEF",B / 16 + 1,1); |
|||
310 B = (B - INT (B / 16) * 16) * 16 |
|||
320 NEXT J,I</lang> |
|||
=={{header|AutoHotkey}}== |
=={{header|AutoHotkey}}== |