Nismo se razumeli. Meni nije potreban kod koji lici na ovaj u C, vec koji radi 100% identicno, jer ovo sto dobijem u mom Java kodu moram da uparim sa rezultatima koji su dobijeni nekom drugom aplikacijom koja je radjena u C, a ovu metodu sam skinuo iz zvanicne dokumentacije . Naime ja sam napravio :
Code:
private short izracunaj(byte[] msg){
byte checkSum = 0;
byte checkXOR = 0;
for(int i = 0; i < msg.length; i++) {
checkSum += msg[i];
checkXOR ^= checkSum;
}
return (short)(checkXOR +checkSum*256);
}
i moram da kao rezultat dobijem short (dva bajta), a u celoj kalkulaciji da se ponasa identicno kada dodje do overflowa u racunanju, da odsece gornji bit i tako dalje.
Posto je u javi byte od -128 do 127, a u C unsigned char od 0 - 255, imam utisak da upravo te stvari mi nesto remete.
Moj kod ostvaruje identicne rezultate ne u 90% kako sam prvi put napisao, vec u 99.99%, ali mi ponekad signalizira da nije u redu, a posto se sve odvija asinhrono i da ne kazem random, ne mogu ni da uhvatim taj niz bajtova koji mi generisu gresku(Javlja se jednom u desetak dana, a program radi prosecno 5-6 sati dnevno, sa oko 100 provera na sat).
Kada gledam kod, i pjehe analiziram sta se desava, cini mi se da sve ipak mora biti OK, ali negde, neka suluda kombinacija mi pravi problem.