suma bajtow

G3
  • Rejestracja: dni
  • Ostatnio: dni
  • 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 ?

  • Rejestracja: dni
  • Ostatnio: dni
0

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

  • Rejestracja: dni
  • Ostatnio: dni
0

big czy little endian :>?

__krzysiek85
  • Rejestracja: dni
  • Ostatnio: dni
  • 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

G3
  • Rejestracja: dni
  • Ostatnio: dni
  • 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: dni
  • Ostatnio: dni
  • 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

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.