Tablica bajtów: inkrementacja

0

Witam,

czy ktos z Was ma moze jakis pomysl w jaki sposob najlatwiej zaimplementowac inkrementacje tablic bajtow? Chodzi mi o to, ze dana mamy tablice 16 bajtow, ktora notabene reprezentuja jakas liczbe. Chcialbym zwiekszyc te tablice np o 1. Czyli np:

byte[] tablica = new byte[];
tablica = cosTam;
ZamienNaInteger()
inkrementuj()

przy czym inkrementacja dodatkowo po przekroczeniu jakby wartosci sie przekreca. Chodzi mi o stworzenie takiego licznika...

0

Klasa BigInteger

Konstruktor: public BigInteger(byte[] val)
Z powrotem: public byte[] toByteArray()

Zawijanie można zrobić po prostu przez skracanie tablicy jeśli jest za długa.

0
donkey7 napisał(a)

Klasa BigInteger

Konstruktor: public BigInteger(byte[] val)
Z powrotem: public byte[] toByteArray()

Zawijanie można zrobić po prostu przez skracanie tablicy jeśli jest za długa.

Dzieki, pamietam ze cos takiego robilem i przejrzalem cala klase Integer... Zdziwilo mnie, ze nie ma tam takiego konstruktora. No nic, dziura w glowie, kompletnie zapomnialem. W miedzy czasie napisalem inna funkcje:

public static final int byteArrayToInt(byte[] b) {
return (b[0] << 24)
+ ((b[1] & 0xFF) << 16)
+ ((b[2] & 0xFF) << 8)
+ (b[3] & 0xFF);
}

public static final byte[] intToByteArray(int value) {
    return new byte[]{
                (byte) (value >>> 24),
                (byte) (value >>> 16),
                (byte) (value >>> 8),
                (byte) value};
}

public static byte[] inkrementuj(byte[] tablica, int inkrementacja) {
    byte[] fragment = new byte[4];

    for (int i = 0; i < 16; i += 4) {
        System.arraycopy(tablica, i, fragment, 0, 4);
        int wartoscFragmentu = Tablice.byteArrayToInt(fragment);
        if (wartoscFragmentu < Integer.MAX_VALUE) {
            wartoscFragmentu += inkrementacja;
            System.arraycopy(Tablice.intToByteArray(wartoscFragmentu), 0, tablica, i, 4);
            return tablica;
        } else {
            System.arraycopy(new byte[4], 0, tablica, i, 4);
        }
    }

    return new byte[16];
}

jakby ktos chcial^^ raczej dziala dla tablic 16 bajtowych

0

To klasa BigInteger.

package Main;

import java.math.BigInteger;

public class Main {

    public static void main(String[] args) {
        byte[] byteArray = new byte[] { 5, 5, 5, 5 };
        for (byte byteValue : byteArray) {
            System.out.print(byteValue + " ");
        }
        System.out.println();
        BigInteger bigInteger = new BigInteger(byteArray);
        System.out.println(bigInteger);
        bigInteger = bigInteger.add(BigInteger.ONE);
        System.out.println(bigInteger);
        byteArray = bigInteger.toByteArray();
        for (byte byteValue : byteArray) {
            System.out.print(byteValue + " ");
        }
        System.out.println();
    }
}
0
donkey7 napisał(a)

To klasa BigInteger
Tak, wiem. Po prostu zapomnialem o niej i szukalem w Integer takich metod :)<image></image>

1 użytkowników online, w tym zalogowanych: 0, gości: 1