suma bajtow

G3
  • Rejestracja:ponad 13 lat
  • Ostatnio:ponad 12 lat
  • Postów:8
0

Mam tablicę,

Kopiuj
byte[] is = {60,-4,29,22}; // w hex 3CFC1D16 = 1023155478

jestem kiepski z liczenia bajtow, moze mi ktoś pomoże?
Jak wyliczyć int-a z tej tablicy ?

0

(is[0] << 24) | (is[1] << 16) | (is[2] << 8) | is[3]

0

big czy little endian :>?

__krzysiek85
  • Rejestracja:ponad 18 lat
  • Ostatnio:ponad 9 lat
  • Postów:1019
0
bb napisał(a)

(is[0] << 24) | (is[1] << 16) | (is[2] << 8) | is[3]

Ten algorytm jest błędny.
Np. dla takich dwóch tablic: {-128,-67,120,-128} i {-128,-67,121,-128} jest ten sam wynik (-128).

Użyj zwykłego dodawania: (b0<<24) + (b1 << 16) + (b2 << 8) + b3


Registered Linux user #456405 | SCJP 6 | SCWCD 5 | SCBCD 5
G3
  • Rejestracja:ponad 13 lat
  • Ostatnio:ponad 12 lat
  • Postów:8
0

OK, dzieki

(is[0]<<24) + ((is[1]) << 16) + (is[2] << 8) + is[3]; zwraca mi 1006378262

Docelowo musi być tak.

(is[0]<<24) + ((is[1]&0xff) << 16) + (is[2] << 8) + is[3]; 1023155478 i wtedy jest ok

iooi
  • Rejestracja:prawie 15 lat
  • Ostatnio:ponad 11 lat
  • Postów:573
0

Ten algorytm jest równie błędny. Maskuj bity:
is[0] << 24 & 0xff000000 | is[1] << 16 & 0xff0000 | is[2] << 8 & 0xff00 | is[3] & 0xff

edytowany 1x, ostatnio: iooi

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.