68 votes

Comment combiner des tableaux de deux octets

J'ai deux tableaux d'octets et je me demande comment je pourrais en ajouter un ou les combiner pour former un nouveau tableau d'octets.

121voto

pickypg Points 8948

Vous essayez juste de concaténer les tableaux de deux octets?

 byte[] one = getBytesForOne();
byte[] two = getBytesForTwo();
byte[] combined = new byte[one.length + two.length];

for (int i = 0; i < combined.length; ++i)
{
    combined[i] = i < one.length ? one[i] : two[i - one.length];
}
 

Ou vous pouvez utiliser System.arraycopy:

 byte[] one = getBytesForOne();
byte[] two = getBytesForTwo();
byte[] combined = new byte[one.length + two.length];

System.arraycopy(one,0,combined,0         ,one.length);
System.arraycopy(two,0,combined,one.length,two.length);
 

Ou vous pouvez simplement utiliser une liste pour faire le travail:

 byte[] one = getBytesForOne();
byte[] two = getBytesForTwo();

List<Byte> list = new ArrayList<Byte>(Arrays.<Byte>asList(one));
list.addAll(Arrays.<Byte>asList(two));

byte[] combined = list.toArray(new byte[list.size()]);
 

29voto

CJPro Points 61

Vous pouvez le faire en utilisant le paquet Apace common lang ( org.apache.commons.lang.ArrayUtils class). Vous devez faire ce qui suit

 byte[] concatBytes = ArrayUtils.addAll(one,two);
 

2voto

Bob Bryan Points 1312
 String temp = passwordSalt;
byte[] byteSalt = temp.getBytes();
int start = 32;
for (int i = 0; i < byteData.length; i ++)
{
    byteData[start + i] = byteSalt[i];
}
 

Le problème avec votre code ici est que la variable i utilisée pour indexer les tableaux va à la fois au-delà du tableau byteSalt et du tableau byteData. Donc, assurez-vous que byteData est dimensionné pour être au moins égal à la longueur maximale de la chaîne passwordSalt plus 32. Ce qui va corriger cela remplace la ligne suivante:

 for (int i = 0; i < byteData.length; i ++)
 

avec:

 for (int i = 0; i < byteSalt.length; i ++)
 

1voto

Michael K Points 947

En supposant que votre tableau byteData est plus beau que 32 + byteSalt.length() ... vous allez à sa longueur, pas byteSalt.length . Vous essayez de copier au-delà de la fin du tableau.

1voto

Jeremie Points 485

J'ai utilisé ce code qui fonctionne très bien. Il suffit d'appendData et de transmettre un seul octet avec un tableau, ou deux tableaux pour les combiner:

 protected byte[] appendData(byte firstObject,byte[] secondObject){
    byte[] byteArray= {firstObject};
    return appendData(byteArray,secondObject);
}

protected byte[] appendData(byte[] firstObject,byte secondByte){
    byte[] byteArray= {secondByte};
    return appendData(firstObject,byteArray);
}

protected byte[] appendData(byte[] firstObject,byte[] secondObject){
    ByteArrayOutputStream outputStream = new ByteArrayOutputStream( );
    try {
        if (firstObject!=null && firstObject.length!=0)
            outputStream.write(firstObject);
        if (secondObject!=null && secondObject.length!=0)   
            outputStream.write(secondObject);
    } catch (IOException e) {
        e.printStackTrace();
    }
    return outputStream.toByteArray();
}
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X