byte [] in String convertieren?

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hallo,

ich habe Quellcode im Internet gefunden der mir einen byte-Array in einen String convertieren kann und der funktioniert auch super.
Ich würde den aber gerne auch verstehen und da gibts ein kleines Problem.

Diese Zeile sagt mir einfach garnichts und das ist wohl die entscheidende:

Code:
hexDigit[(b >> 4) & 0x0f];

Was bedeutet der Operator '>>'? Ich finde den nicht im Netz.

Danke

Christian


PS: Der gesammte Code:
Code:
   /** hexadecimal digits */
  private static char hexDigit[] =
  {
    '0', '1', '2', '3', '4', '5', '6', '7',
    '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'
  };
  
  /** conversion routine */
  public static char byteToHexHi(byte b)
  {
    return hexDigit[(b >> 4) & 0x0f];
  }
  /** conversion routine */
  public static char byteToHexLo(byte b)
  {
    return hexDigit[b & 0x0f];
  }

  /** Inserts the hex representation of the given byte array. */
  public static String setValue( byte[] bytes)
  {
    if (bytes != null)
    {
      StringBuffer string=new StringBuffer(bytes.length*2);
      for (int i=0; i<bytes.length;++i)
      {
      	string.append(byteToHexHi(bytes[i]));
        string.append(byteToHexLo(bytes[i]));
      }
      return string.toString();
    }
    else return "";
  }
 
G

Guest

Gast
Danke für deine Antwort.

Ich war gerade etwas länger weg. Tut mir leid, dass das Feedback erst jetzt kommt.

Also der Operator würde bedeuten:

1100 0111 >> 0000 1100

Was bedeutet dann das & 0x0F?
eine UND-Verknüpfung?

0000 1100 &
0000 1111 =
0000 1100

Irgendwo muss ich da ne Fehler haben glaube ich.
 

Bleiglanz

Gesperrter Benutzer
sollte eigentlich überflüssig sein,

denn durch das >> kommen ja von links eh nullen rein...hmm...

aber ich glaub, dass >> mit vorzeichen shiftet, weshalb der autor eher >>> hätte nehmen sollen...?
 

byte

Top Contributor
Anonymous hat gesagt.:
Was bedeutet dann das & 0x0F?
eine UND-Verknüpfung?

0000 1100 &
0000 1111 =
0000 1100

Irgendwo muss ich da ne Fehler haben glaube ich.

genau richtig. & ist der bitweise AND vergleich. falsch ist der vergleich in diesem fall nicht, nur überflüssig, wie bleiglanz schon sagte und du schon richtig erkannt hast.
 
G

Guest

Gast
Hallo noch mal :)

ganz so einfach ist die Sache doch nicht wie gedacht.
Die Ausgabe unterscheidet sich sehr wohl wenn ich das & 0xff weglasse:

Code:
           byte b = (byte)0xc7;          
           System.out.println("1: " + b);		// Ausgabe = 1: -57
           System.out.println("2: " + (b & 0xFF));	// Ausgabe = 1: 199

Und ich glaube ich habe auch eine Erklärung dafür.

zu 1:
Bei der Ausgabe von b mit Hilfe von println() wird b in int konvertiert
int ist 4 byte lang und der Wert im Speicher sollte so aussehen
1000 0000 1100 0111 ( die erste 1 ist für das negative Vorzeichen)
Die Anzeige ist korrekt da das Byte als negativ gekennzeichnet ist.

zu 2:
b wird wieder in int konvertiert
die 4 byte int sehen wieder gleich aus
1000 0000 1100 0111
jetzt kommt aber die UND-Verknüpfung mit 0x00FF (die 00 werden automatisch eingefügt)
0000 0000 1111 1111
Ergebnis:
0000 0000 1100 0111
Weil es jetzt ein int ist und es keine führende 1 hat muss es positiv sein und der Wert ist 199

Das sind alles Vermutungen aber ich glaube es passt zusammen und ich habe keinen Fehler gemacht.


Würde mich tierisch interessieren ob ich recht habe :)

Christian
 
G

Guest

Gast
die funktionalität steht das ist kein Problem.
Mir gehts nur noch ums Verständnis und da bringt mich der Link nicht viel weiter.

3. Zeile bei zu 2: müsse eigentlich
1111 1111 1100 0111 anstatt 1000 0000 1100 0111 sein.
 

Reinhold

Mitglied
der link könnte schon helfen, wenn du ihn genau liest:

ein byte hat standardmäßig den wertebereich -128..127. wenn es aber nun aus programmtechnischen oder sonstigen gründen erforderlich ist, die werte 0..255 verwenden zu können ohne dafür einen short oder int zu verwenden, so kann man dies realisieren indem man & 0xff verwendet. dabei wird das high-byte sozusagen ignoriert, also -wie du schon erkannt hast- das vorzeichenbit weggeschnitten. somit hat man 'nach außen hin' zwar immer noch ein byte, intern repräsentiert das byte jetzt aber den wertebereich 0..255. somit spart man sich 1 bzw. 3 zusätzliche bytes, die für eine short oder int variable nötig wären.

gruß,
reinhold
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
V String in Byte umwandeln Java Basics - Anfänger-Themen 11
T byte[] zu String mit Sonderzeichen Java Basics - Anfänger-Themen 2
P String in byte konvertieren, wie? Java Basics - Anfänger-Themen 4
R byte[] zu String und Ausgabe Java Basics - Anfänger-Themen 2
X Datentypen String in byte[] Java Basics - Anfänger-Themen 29
H Variablen string nach byte Java Basics - Anfänger-Themen 12
L Byte[] to String, doch bits sind gespiegelt (MSB/LSB) Java Basics - Anfänger-Themen 3
S Von byte[] nach String zurueck nach byte[]. Arrays sind nicht identisch :( Java Basics - Anfänger-Themen 6
S ArrayList<Byte> in String umwandeln Java Basics - Anfänger-Themen 5
S Input/Output String in byte umwandeln? Java Basics - Anfänger-Themen 5
L Datentypen byte[] in String und wieder zurück Java Basics - Anfänger-Themen 3
V Byte -> String -> Byte verlustfrei Java Basics - Anfänger-Themen 12
Z Wie Byte[] in einen String oder int konvertieren Java Basics - Anfänger-Themen 2
J String array to byte array Java Basics - Anfänger-Themen 8
B String in Byte konvertieren Java Basics - Anfänger-Themen 19
mwildam Byte array oder String Java Basics - Anfänger-Themen 4
M byte in String? Java Basics - Anfänger-Themen 3
B String nach byte[] Java Basics - Anfänger-Themen 17
I Probleme mit String Byte[] und Unicode Java Basics - Anfänger-Themen 15
G String zu byte[] "casten"? Java Basics - Anfänger-Themen 3
H String in Byte Array wandeln Java Basics - Anfänger-Themen 25
K byte[] in String Java Basics - Anfänger-Themen 7
D Byte-Array zu Hex-String umwandeln Java Basics - Anfänger-Themen 3
G String to unsigned byte Java Basics - Anfänger-Themen 12
M Byte InputStream zu Zeichenformat Unicode bzw String konvert Java Basics - Anfänger-Themen 5
C Hex-String ind einen byte[] umwandeln? Java Basics - Anfänger-Themen 6
D String[] TO byte[] ? Java Basics - Anfänger-Themen 3
F String in Byte[] konvertieren Java Basics - Anfänger-Themen 2
N byte[] to String Java Basics - Anfänger-Themen 4
C Probleme mit Byte konvertieren nach int Java Basics - Anfänger-Themen 10
T IOStreams read(byte[]b) methode Java Basics - Anfänger-Themen 2
I Dateigröße von einem InputStream oder byte[] bekommen Java Basics - Anfänger-Themen 2
krgewb byte-Array, das ein Bild repräsentiert Java Basics - Anfänger-Themen 1
G ImageIcon in Byte-Array ablegen Java Basics - Anfänger-Themen 7
D Best Practice Parameter int vs byte Java Basics - Anfänger-Themen 16
J RSA Verschlüsselung Testen / byte[] in Objekt umwandeln Java Basics - Anfänger-Themen 1
S Byte-Array kann chars speichern? Java Basics - Anfänger-Themen 3
N Datentypen Image zu Byte-Array Java Basics - Anfänger-Themen 4
M Datentypen Byte, Float und Boolean Java Basics - Anfänger-Themen 13
F byte, short oder doch int? Java Basics - Anfänger-Themen 6
S Performance von byte[], short[], int[]..? Java Basics - Anfänger-Themen 24
D Methoden int to byte array und zurück? Java Basics - Anfänger-Themen 5
P int zu byte Java Basics - Anfänger-Themen 8
F Byte Array wachsen lassen Java Basics - Anfänger-Themen 5
M Java Klasse Byte Java Basics - Anfänger-Themen 10
F Byte Ausgabe plötzlich falsch Java Basics - Anfänger-Themen 0
O Input/Output Ein (negatives) Byte über PrintWriter hinausschreiben Java Basics - Anfänger-Themen 3
W Nullpointer bei Objekt Serialisierung mit ArrayList<byte[]> etc. Java Basics - Anfänger-Themen 2
J byte - Ausgabe Java Basics - Anfänger-Themen 2
F Teil eines Byte Array an eine Methode übergeben Java Basics - Anfänger-Themen 5
S byte to float Java Basics - Anfänger-Themen 4
J Byte Folge erkennen Java Basics - Anfänger-Themen 5
M sehr großes Byte Array Java Basics - Anfänger-Themen 3
M Byte Array und Co. Java Basics - Anfänger-Themen 12
T Operatoren Float in byte umwandeln Java Basics - Anfänger-Themen 3
Y File to byte[] and byte[] to sysout Java Basics - Anfänger-Themen 3
P Wann Byte-Stream und wann Character-Stream? Java Basics - Anfänger-Themen 11
F Hexfolge in Byte Array ersetzen Java Basics - Anfänger-Themen 8
T Erste Schritte Byte Java Basics - Anfänger-Themen 3
H Variablen short <-> byte[] Java Basics - Anfänger-Themen 15
H Variablen 32bit Zählwert als Byte-Array Java Basics - Anfänger-Themen 9
B Frage zur Effizienz von read und read(byte[]) Java Basics - Anfänger-Themen 23
R Erste Schritte Rechnenoperationen mit byte, short und char Java Basics - Anfänger-Themen 8
V Datentypen Frage zum Datentyp Byte Java Basics - Anfänger-Themen 11
V unsigned byte? Java Basics - Anfänger-Themen 27
M byte Array Mindestlänge Java Basics - Anfänger-Themen 19
U short[] nach byte[] Java Basics - Anfänger-Themen 11
D [jni] jbytearray <-> byte array Java Basics - Anfänger-Themen 8
S Datentypen Ändern eines byte[] Arrays Java Basics - Anfänger-Themen 4
B byte-weise Verschlüsselung Java Basics - Anfänger-Themen 6
P byte Array aus ImageIcon Java Basics - Anfänger-Themen 10
F von Byte zu 2 Stellig Hex Java Basics - Anfänger-Themen 3
G byte[] (Base64) korrekt übergeben Java Basics - Anfänger-Themen 4
V Jar-Datei von Byte-Array oder Stream laden? Java Basics - Anfänger-Themen 9
O 64bit- OS byte, short, int oder long bzw. float oder double? Java Basics - Anfänger-Themen 13
G Binär in Byte speichern Java Basics - Anfänger-Themen 7
T Datentypen byte -Division..mal gehts mit cast mal ohne Java Basics - Anfänger-Themen 5
T Datentypen default ist int, cast zu byte nötig... Java Basics - Anfänger-Themen 2
F Byte nach Zahl umwandeln Java Basics - Anfänger-Themen 11
E Datentypen type cast problem (int, byte,) Java Basics - Anfänger-Themen 5
T Datentypen unsigned byte? Java Basics - Anfänger-Themen 9
G Integar zu Byte Java Basics - Anfänger-Themen 4
P Byte mit 0...255? Java Basics - Anfänger-Themen 5
N Datentypen Fehler beim Umwandeln in byte Java Basics - Anfänger-Themen 3
L Umwandlung int <--> byte Java Basics - Anfänger-Themen 2
L Datentypen 250 und byte? Java Basics - Anfänger-Themen 4
H Datentypen Byte-Array RSA Java Basics - Anfänger-Themen 9
H Datentypen Rechnen mit signed Byte-Array - unsinged byte Java Basics - Anfänger-Themen 3
N Files mit Byte an Socket versenden Java Basics - Anfänger-Themen 2
Hindi93 Byte to Int Java Basics - Anfänger-Themen 4
H Datentypen byte[] to int Java Basics - Anfänger-Themen 9
S hex zu byte Java Basics - Anfänger-Themen 4
M Byte Array: Werte größer 127? Java Basics - Anfänger-Themen 11
S Addition zweier 32 Byte langer ByteArrays Java Basics - Anfänger-Themen 5
H 1 Byte Status Variable Java Basics - Anfänger-Themen 3
P Datentypen Byte und char Typecast Java Basics - Anfänger-Themen 2
M Bit/Byte Operationen Java Java Basics - Anfänger-Themen 8
W Datentypen int -> byte Java Basics - Anfänger-Themen 2
H Datentypen Byte-Array aus Stream lesen Java Basics - Anfänger-Themen 3
F Typenumwandlung byte <=> int verstehen Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben