🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.java
3 messages
3 total messages Started by bigMamma Sat, 19 Oct 2013 17:21
obliczenie sumy kontrolnej (w C+ działa) a w java?
#153923
Author: bigMamma
Date: Sat, 19 Oct 2013 17:21
26 lines
1941 bytes
Dzień dobry,
mam następujący problem.
Oryginalny kod w C+:

short CalcCrc(char *str,int len)
{
short crc=0;
for(int i=0;i<len;i++)
crc ^= (short)((unsigned char)str[i]) << (i%9);
return crc;
}

wylicza sumę kontrolną. Przepisałem to w Java:

public static byte [] CRC(byte[] dane) {

        short crc = 0;
        for (int i = 0; i < dane.length; i++) {
            crc ^= (short)(( char)dane[i]) << (i%9);
        }
String  w = String.format("%04X", crc);
return w.getBytes();
   }

niestety, nie zwraca mi prawidłowej sumy kontrolnej. Czy mogę prosić o pomoc?
ps. operacja na CRC to ma być XOR z 16 bitową liczbą, przsuniętą w lewo o modulo z 9 do swojej pozycji.
Re: obliczenie sumy kontrolnej (w C+ działa) a w java?
#153924
Author: Arivald
Date: Sat, 19 Oct 2013 18:05
38 lines
2027 bytes
W dniu 2013-10-19 19:21, bigMamma pisze:
> Dzień dobry,
> mam następujący problem.
> Oryginalny kod w C+:
>
> short CalcCrc(char *str,int len)
> {
> short crc=0;
> for(int i=0;i<len;i++)
> crc ^= (short)((unsigned char)str[i]) << (i%9);
> return crc;
> }
>
> wylicza sumę kontrolną. Przepisałem to w Java:
>
> public static byte [] CRC(byte[] dane) {
>
>          short crc = 0;
>          for (int i = 0; i < dane.length; i++) {
>              crc ^= (short)(( char)dane[i]) << (i%9);
>          }
> String  w = String.format("%04X", crc);
> return w.getBytes();
>     }
>
> niestety, nie zwraca mi prawidłowej sumy kontrolnej. Czy mogę prosić o pomoc?
> ps. operacja na CRC to ma być XOR z 16 bitową liczbą, przsuniętą w lewo o modulo z 9 do swojej pozycji.
>


"char" w javie jest 2 bajtowy. użyj zamiast tego "byte"

Po za tym dane wejściowe są już "byte", rzut niepotrzebny. W C jest 
rzut, dla uzyskania "unsigned", bo "char" w C jest "signed".


-- 
Arivald
Re: obliczenie sumy kontrolnej (w C+ działa) a w java?
#153925
Author: bigMamma
Date: Sun, 20 Oct 2013 17:35
90 lines
2975 bytes
W dniu sobota, 19 października 2013 20:05:35 UTC+2 użytkownik Arivald napisał:
> W dniu 2013-10-19 19:21, bigMamma pisze:
> 
> > Dzień dobry,
> 
> > mam następujący problem.
> 
> > Oryginalny kod w C+:
> 
> >
> 
> > short CalcCrc(char *str,int len)
> 
> > {
> 
> > short crc=0;
> 
> > for(int i=0;i<len;i++)
> 
> > crc ^= (short)((unsigned char)str[i]) << (i%9);
> 
> > return crc;
> 
> > }
> 
> >
> 
> > wylicza sumę kontrolną. Przepisałem to w Java:
> 
> >
> 
> > public static byte [] CRC(byte[] dane) {
> 
> >
> 
> >          short crc = 0;
> 
> >          for (int i = 0; i < dane.length; i++) {
> 
> >              crc ^= (short)(( char)dane[i]) << (i%9);
> 
> >          }
> 
> > String  w = String.format("%04X", crc);
> 
> > return w.getBytes();
> 
> >     }
> 
> >
> 
> > niestety, nie zwraca mi prawidłowej sumy kontrolnej. Czy mogę prosić o pomoc?
> 
> > ps. operacja na CRC to ma być XOR z 16 bitową liczbą, przsuniętą w lewo o modulo z 9 do swojej pozycji.
> 
> >
> 
> 
> 
> 
> 
> "char" w javie jest 2 bajtowy. użyj zamiast tego "byte"
> 
> 
> 
> Po za tym dane wejściowe są już "byte", rzut niepotrzebny. W C jest 
> 
> rzut, dla uzyskania "unsigned", bo "char" w C jest "signed".
> 
> 
> 
> 
> 
> -- 
> 
> Arivald

Dziękuję serdecznie!
Rzeczywiście, teraz działa!
public static byte [] CRC(byte[] dane) {

        short crc = 0;
        for (int i = 0; i < dane.length; i++) {
           
            crc ^= (short)((byte)dane[i]) << (i % 9);
            
        }
        String  w = String.format("%04X", crc);
      return w.getBytes();
    }
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads