2011-12-16 4 views
1

Je développe un logiciel sous Android. Dans une partie particulière du logiciel, j'ai besoin de convertir court à octet et reconvertir à court. J'ai essayé le code ci-dessous, mais les valeurs ne sont pas les mêmes après la conversion.court à octet et octet à conversion courte en Android

short n, n1; 
    byte b1, b2; 
    n = 1200; 
    // short to bytes conversion 
    b1 = (byte)(n & 0x00ff); 
    b2 = (byte)((n >> 8) & 0x00ff); 

    // bytes to short conversion 
    short n1 = (short)((short)(b1) | (short)(b2 << 8)); 

après l'exécution des valeurs de code de n et n1 ne sont pas identiques. Pourquoi?

+0

en double de http://stackoverflow.com/questions/2188660/convert-short-to-byte-in-java – GETah

Répondre

5

Je n'ai pas obtenu la solution de Graham pour fonctionner. Ceci, cependant travailler:

n1 = (short)((b1 & 0xFF) | b2<<8); 
+1

merci cela a fonctionné – Riskhan

1

Vous pouvez utiliser un ByteBuffer:

final ByteBuffer buf = ByteBuffer.allocate(2); 
buf.put(shortValue); 
buf.position(0); 

// Read back bytes 
final byte b1 = buf.get(); 
final byte b2 = buf.get(); 

// Put them back... 
buf.position(0); 
buf.put(b1); 
buf.put(b2); 

// ... Read back a short 
buf.position(0); 
final short newShort = buf.getShort(); 

edit: utilisation de l'API fixe. Gah.

+0

C'est une surpuissance absolue, peut être résolu à la question de l'OP par simplement en utilisant des opérateurs au niveau du bit, comme indiqué dans la réponse de @ Jave –

+0

Sauf que cette solution ne se soucie pas de l'endianness! – fge

+0

Ce n'est pas une mauvaise solution en soi. Si l'on veut sauvegarder un grand nombre de valeurs ou convertir un tableau de courts métrages en octets puis en arrière, cela vaut vraiment la peine d'être considéré. Le cas le plus simple - la conversion entre un court/deux octets, comme demandé, est de préférence effectué sans allouer un tampon. – Jave