210 votes

peut-on faire octet non signé en java

je suis en train de convertir un octet signé en non signé , le problème est que les données que je reçois n'est pas signé et Java ne supporte pas l'octet non signé, donc quand il lit les données qu'il traite comme signé. J'ai essayé de le convertir par la solution suivante, j'ai obtenu de SORTE

    public static int unsignedToBytes( byte a )
   {
       int b =(( a  & 0xFF ));
       return ((b ));
   }

mais quand de nouveau ses convertis en byte-je obtenir les mêmes données signées.Je suis en train d'utiliser ces données comme paramètre à une fonction de java qui n'accepte que des octets en paramètre, et donc ne peuvent pas utiliser tout autre type de données. s'il vous plaît aider.

214voto

Adamski Points 29884

Le fait que les primitives sont signés en Java n'est pas pertinent à la façon dont ils sont représentés dans la mémoire / de transit - Un octet est seulement de 8 bits et si vous interpréter que comme une signé gamme ou pas, c'est à vous. Il n'y a pas de magie drapeau pour dire "c'est signé" ou "ce n'est pas signé".

Comme primitives sont signés le compilateur Java va vous empêcher de l'affectation d'une valeur supérieure à +127 à un octet (ou plus de -128). Cependant, il n'y a rien pour vous arrêter de passer pour un int (ou à découvert) dans le but de réaliser ceci:

int i = 200;
byte b = (byte)200;

// Will print a negative value but you could *still choose to interpret* this as +200.
System.err.println(b); 

// "Upcast" to short in order to easily view / interpret as a positive value.
// You would typically do this *within* the method that expected an unsigned byte.
short s = b & 0xFF;
System.err.println(s); // Will print a positive value.

112voto

Guillaume Points 3232

Je ne suis pas sûr de comprendre ta question.

Je viens d'essayé et de l'octet -12 (valeur signée) il est revenu entier 244 (octet non signé valeur):

  public static int unsignedToBytes(byte b) {
    return b & 0xFF;
  }

  public static void main(String[] args) {
    System.out.println(unsignedToBytes((byte) -12));
  }

Est-ce ce que vous voulez faire?

54voto

aioobe Points 158466

Un octet en Java a la plage de -128 à 127. Il n'y a rien que vous pouvez faire à ce sujet. Si la fonction que vous êtes en passant de l'octet à l'accepte, un byte alors qu'il n'attend pas la valeur de dépasser 127.

Si vous voulez représenter un nombre dans la plage de 0 à 255, vous devriez aller avec char(*), short, int ou long par exemple.

(*)char peut en effet être considéré comme un type intégral.

39voto

Peter Knego Points 57985

Il n'y a pas de primitive d'octets non signés en Java. Habituelles chose est de le jeter aux plus gros de type:

int anUnsignedByte = (int) byte & 0xff;

6voto

Kyle Kinkade Points 49

Une note de côté, si vous voulez l'imprimer, vous pouvez juste dire

byte b = 255;
System.out.println((b < 0 ? 256 + b : b));

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