Search  
Sunday, December 5, 2021 ..:: Forum ::.. Register  Login
 Forum Minimize
Pentru a putea posta mesaje trebuie să vă înregistraţi.
Notă: Mesajele cu conţinut jignitor sau ilegal (inclusiv cereri de soft piratat) nu sunt acceptate şi vor fi şterse imediat .

Pentru a primi raspunsuri rapide si corecte, scrieti in mesaj ce intentionati sa faceti, ce mesaj de eroare primiti, in ce context si in urma caror actiuni. De asemenea, mentionati versiunea de FoxPro in care lucrati!
Dacă nu specificați versiunea, se consideră VFP 9.0 SP2.

SearchForum Home
  Visual FoxPro  Cod, sintaxa si comenzi  Calcul crc16 IB...
 Calcul crc16 IBM / BUYPASS
 
 7/2/2021 9:53:50 PM
User is offlineboby
61 posts


Calcul crc16 IBM / BUYPASS
 (N/A)
Salut
Va rog frumos daca ma poate ajuta cineva cu o transpunere de calcul CRC16 pentru un sir hexa.
Exemplu de sir : A000010103 crc este 06 35
Am exemple in java si vba pe care incerc sa le atasez
Eu am incercat ceva dar nu-mi iese :
LPARAMETERS tcString
LOCAL i, nbx, hlp
LOCAL crc as Byte
CHECKSUM=0
FOR i=1 TO LEN(tcString)
tmp=SUBSTR(tcstring,i,1) && CHR(0x1000) ...aici nu stiu ce sa fac
crc=BITXOR(crc,tmp)
FOR j=0 TO 7
IF BITAND(crc,0x8000) <> 0
crc=BITXOR(crc,0x8005)
ELSE
crc=BITAND(crc,0xffff)
ENDIF
ENDFOR
ENDFOR
RETURN TRANSFORM(crc,'@0x')

am verificat sirul pe situl https://crccalc.com/ la CRC16/BUYPASS si da corect

Multumesc frumos,
 7/2/2021 10:49:19 PM
User is offlineboby
61 posts


Re: Calcul crc16 IBM / BUYPASS
 (N/A)

Exemple:
Java implementation

public class CRC {
private static final int CRC_POLYNOM = (int) 0x00008005;
private static final int CRC_MASK = (int) 0x00008000;
public static int CalculateCRC(byte[] buffer, int length) {
int crc = 0x00000000;
for (int i = 0; i < length; i++) {
crc ^= (int) ((buffer[i] << 8) & 0x0000FFFF);
for (int j = 0; j < 8; j++) {
if ((crc & CRC_MASK) == CRC_MASK) {
crc <<= 1;
crc = crc ^ CRC_POLYNOM;
} else {
crc <<= 1;
}
crc &= 0x0000FFFF;
}
}
return crc;
}
}
--------------------------------
VB implementation

Public Function CRCCalculator(data() As Byte) As UShort
Dim crc As UShort = &H0&
Dim tmp As UShort = &H0&
Dim i As Long
Dim j As Long
For i = 0 To data.Length() – 1
tmp = data(i) * &H100&
crc = crc Xor tmp
For j = 0 To 7
If (crc And &H8000&) Then
crc = ((crc * 2) Xor &H8005&) And &HFFFF&
Else
crc = (crc * 2) And &HFFFF&
End If
Next j
Next i
CRCCalculator = crc And &HFFFF
End Function

 7/2/2021 10:55:16 PM
User is offlineboby
61 posts


Re: Calcul crc16 IBM / BUYPASS
 (N/A)
Imi cer scuze, cred ca am postat in locul gresit...am vazut doar Implementare, rog Adminul sa mute postul din Raportari...
 7/3/2021 1:01:44 AM
User is offlineboby
61 posts


Re: Calcul crc16 IBM / BUYPASS
 (N/A) Modified By boby  on 7/3/2021 12:10:02 AM)
Scuze, sirul hex este A0000101 !
Alt exemplu de sir :
A0000103A00203524F4EA00303393436 la care CRC16 este 36 B9
 7/4/2021 11:06:22 AM
User is offlineboby
61 posts


Re: Calcul crc16 IBM / BUYPASS
 (N/A)
Ok, am rezolvat..pentru cine mai este interesat:
Parameters tcString
Local i, j
Local crc

crc = 0
For i=1 To Len(tcString)
tmp = Asc(Substr(tcString,i,1))*256
crc=Bitxor(crc,tmp)
For j=0 To 7
If Bitand(crc,0x8000) <> 0
crc=Bitand(Bitxor(crc*2,0x8005),0xffff)
Else
crc=Bitand(crc*2,0xffff)
Endif
Endfor
ENDFOR

Return Transform(crc,'@0')

O zi frumoasa tuturor!
  Visual FoxPro  Cod, sintaxa si comenzi  Calcul crc16 IB...

Search  Forum Home         

Copyright 2002-2013 Profox   Terms Of Use  Privacy Statement