byte-array in unsigned int in java
Ich die Umwandlung eines byte-array in int
dadurch:
ByteArrayInputStream bais = new ByteArrayInputStream (data);
DataInputStream dis = new DataInputStream (bais);
int j = dis.readInt();
Aber es gibt eine Zahl unterzeichnet, wo ich will eine Zahl ohne Vorzeichen, denn ich möchte zu senden, die Anzahl der server als Ganzzahl während der Verschlüsselung und zur Entschlüsselung auf dem server. wenn es ist eine vorzeichenbehaftete Zahl, die ich tun kann.
bitte jeder 1 mir helfen..........
venu
- In Java alle ganzzahligen Typen (außer char) signiert sind.
- Welches Protokoll verwendest du? Wenn Sie etwas schicken an den server, die "etwas" ist und wie es gesendet wird, ist wichtig, nicht Ihre interne Darstellung. Ich denke, deine Frage sollte klingen wie: "Wie sende ich zahlen ohne Vorzeichen mit Hilfe von corba/RMI/Hessian/t3/iiop/http/.....?"
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einer
int
ist immer eine signierte 32-bit-Zahl in Java. Jedoch, dies ist nur von Bedeutung, wenn Sie tun Mathe mit ihm. Wenn alles, was Sie interessiert, ist das Muster der 0-und 1-bits, einfach ignorieren das Schild.Wenn Sie brauchen, um zu tun, einige mathematische, konvertieren Sie es in ein
long
durch Maskierung:Tun alle Arithmetik mit
long
Operanden modulo 0xFFFFFFFFL. Wenn Sie fertig sind, wandeln Sie das Ergebnis zurück in eineint
und übermitteln.Java ' s primitive ganzzahlige Typen (z.B. byte, short, int und long) sind alle signiert. Aber Sie können umgehen dies.
Tun (sagen), 32-bit-unsigned-Arithmetik, nur die arithmetische, die vorgibt, die 'int' ist unsigniert. Zum Beispiel
2**31 - 1
ist die größte (signiert)int
Wert. Wenn Sie hinzufügen, um es erhalten Sie-2**31
. Aber das bit-Muster ist das gleiche wie+2**31
wenn Sie denken, derint
als unsigned. Dies funktioniert auch für die Subtraktion und Multiplikation. (Ich bin mir nicht sicher über die Teilung und den Rest, aber die Chancen sind, dass spielt keine Rolle für Sie).Vergleich vorzeichenloser 32-bit-Werten ist ein wenig komplizierter. Zum Beispiel
-1
ist weniger, dass+1
, aber wenn Sie interpretieren-1
als unsigned Wert ein, den Sie+2**32 - 1
sollte größer sein, als '+1'. Sie können kompensieren, indem er die übersetzung der Ungleichheit (ich überlasse es dem Leser, um es herauszufinden), oder durch Gießen derint
Wertelong
Maskierung Sie mit0xffffffffL
und vergleichen Sie, wie sehnt sich danach; z.B.Konvertierung von 32-bit unsigned Integer in Strings ist am einfachsten geschieht mit longs; z.B.
Nun, ich werde frei zugeben, dass mit
int
zu repräsentieren 32-bit-Werte ohne Vorzeichen ist schwierig und potenziell fehleranfällig. Eine sauberere Lösung wäre die Verwendunglong
im ganzen, oder wenn Ihre Anwendung 64-bit-Werte ohne Vorzeichen zu verwendenBigInteger
.UPDATE - es sieht aus Java 8 wird die Unterstützung (in form von Bibliotheks-Methoden) für die Behandlung von
int
undlong
als unsigned-Typen - siehe "Unsigned-Integer-Arithmetik-API jetzt im JDK 8" von Joseph Darcy @ Oracle.Jede Zelle in dem array behandelt wird als unsigned int:
Java keine unsigned int, so müssen Sie manuell invertiert die bits um einen Wert ohne Vorzeichen wenn du unbedingt eine haben.
Habe dies von Google.