StringInhalt umwandeln



  • Moin,

    wie mache ich aus einem String mit 8 Zeichen wieder ne Hex-Zahl?

    Bsp: String ist 01000101 sollte hex dann ergeben 85

    Danke



  • public class Test {
        public static void main(String[] args) {
            String str = "Hier steht irgendwas";
    
            char[] chArr = str.toCharArray(); //String in ein Chararray umwandeln
    
            for (int i = 0; i < chArr.length; i++) {
                System.out.println(
                    chArr[i] + " - " + //Char ausgeben
                    (int) chArr[i] + " - " + //Wert des Chars als Zahl ausgeben
                    Integer.toBinaryString((int) chArr[i]) + " - " + //char in ein Binarystring umwandeln
                    Integer.toHexString((int) chArr[i]) //char in ein Hexstring umwandeln
                );
            }
        }
    }
    

    Ich geb Dir mal nen einfachen Tipp,
    versuchs mal mit der Hilfe von Java 😉

    Und noch was nebenbei:
    Bin 0100 0101 ergibt
    Hex 4 5
    😃



  • Herzlichen Dank!!

    Ok mit der Umrechnung haste recht!! Mit der Hilfe hader ich immer ein wenig, werde mich aber bessern!!

    Also dein Vorschlag funzt, aber was mache ich wenn ich ein Array hab, in dem Bin-Code drin ist und ich will Hex-Code haben??

    Bsp: Array1[0]= 00100010 soll werden Array2[0]= 22
    Array1[1]= 11010101 soll werden Array2[1]= D5

    Ne Idee???



  • hrhr, ne eigene Methode schreiben? 😃
    Ne, keine Ahnung, hab ich mich noch nicht mit befasst.
    Aber langsam frag ich mich, was du eigentlich vorhast.
    🙂



  • Also was ich genau vor habe bzw. machen muss:

    Ich muss über ein TextFeld text einlesen. Jedes Zeichen wird ASCII-mässig in 7Bit codiert. Dann muss ich aus diesen 7Bit, acht Bit machen, wobei das höchstwertigste Bit des ersten Zeichens das niedrigste Bit des zweiten Zeichens wird. Dazu schreibe ich die BinCode in einen langen String und zerlege diesen wieder in acht Bit. Jetzt habe ich also ein StringArray in dem Bin-Code steht. Diesen muss ich dann wieder Hex umwandeln?!! Und da liegt das Problem!!

    Hoffe die Erklärungen genügen dir!!
    Auch wenn du dir noch keine grossen Gedanken gemacht hast, evtl. Ideenansätze! Evtl dieses Prob ganz anders an zu gehen?

    Danke



  • Also was ich genau vor habe bzw. machen muss:

    Ich muss über ein TextFeld text einlesen. Jedes Zeichen wird ASCII-mässig in 7Bit codiert. Dann muss ich aus diesen 7Bit, acht Bit machen, wobei das höchstwertigste Bit des ersten Zeichens das niedrigste Bit des zweiten Zeichens wird. Dazu schreibe ich die BinCode in einen langen String und zerlege diesen wieder in acht Bit. Jetzt habe ich also ein StringArray in dem Bin-Code steht. Diesen muss ich dann wieder Hex umwandeln?!! Und da liegt das Problem!!

    Hoffe die Erklärungen genügen dir!!
    Auch wenn du dir noch keine grossen Gedanken gemacht hast, evtl. Ideenansätze! Evtl dieses Prob ganz anders an zu gehen?

    Danke



  • So ganz durchgeblickt habe ich da nicht,
    aber vielleicht hilft es Dir ja,
    wenn Du Dir in der Hilfe von Java die Binäroperationen genauer anschaust.
    Und dann die ASCII-Zeichen Binär bearbeitest.
    da kann man auch feine Sachen mit machen 😉

    zB:
    int x,y;
    x = 0xF5;
    y = 0x1E;
    x &= y; // x mit y UND verknüpft

    dann ist x = 0x14
    Nochmal als Binärdarstellung:
    1111 0101 UND verknüpft mit:
    0001 1110 =
    ---------
    0001 0100
    So kannst du zB. Bits filtern.

    oder du kannst auch bits schieben:
    int x = 0x01;
    x = x<<2;

    ergebnis: x = 4
    Binär:
    0000 0001 Um 2 Bits linksverschoben =
    ---------
    0000 0100

    dann gibt es da noch:
    x ~= y; // Einerkomplement
    x |= y; // ODER Verknüpfung
    x &= y; // UND Verknüpfung
    x ^= y; // EXKLUSIV-ODER
    x >>= y; // Rechtsschieben mit Vorzeichen (Höchstwertige bit)
    x >>= y; // Rechtschieben ohne Vorzeichen
    x <<= y; // Linksschieben

    (das sind die Kurzschreibweisen, alternativ geht natürlich auch:
    x = x << y;
    )

    Damit kannst du nun vielleicht dir erstmal deine Zahl aufbauen und dann nachher in einen HexString umwandeln, oder so.

    Das gute an den Binäroperationen ist, dass sie sauschnell sind.

    Hoffe mal, dass dich das weiter bringt,
    MfG Ingo 🙂



  • @BlinderBaer: Die Frage hattest du schon mal gestellt: http://www.c-plusplus.net/forum/viewtopic.php?t=50816



  • Guter Dr.
    das ist soweit richtig, allerdings bin ich dem Schritt, eine STRING-ARRAY in ein HEX-ARRAY (auch mit deiner Hilfe) kein Stück näher gekommen!!
    Die Umwandlung eines Strings über den "Umweg" eines ByteArrays ist mir gelungen und auch plausibel, aber wie gehts aus nem Array heraus!!???



  • Nicht streiten ...

    public class BinaryDemo
    {
    	public String binToHex (String binaryString) {
    		String hexArray[] = new String[] {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"};
    		StringBuffer buffer = new StringBuffer();
    		String dummyString = new String();
    		buffer.append("0x");
    		int step = 4;
    		for (int i=0; i<binaryString.length(); i+=4) {
    			dummyString = binaryString.substring(i, i+step);
    			int dummyInt = Integer.parseInt(dummyString, 2);
    			buffer.append(hexArray[dummyInt]);
    		}
    		return buffer.toString();
    
    	}
    
    	public static void main (String args[]) {
    		BinaryDemo demo = new BinaryDemo();
    		String number = "0010011100111010";
    		System.out.println("The binary number "+number+" is in hex "+demo.binToHex(number));
    	}
    }
    

    Das ist um von binär auf hex zu kommen ... übrigens muss der Binärstring vollständig sein d.h. jede Hexzahl wird durch 4 bits repräsentiert. Entsprechend k*4-fache Bits müssen vorhanden sein.



  • hi Cengiz,
    wir streiten nicht!! Das schonmal vorweg!!
    Danke für deinen Beitrag, allesdings hast du mein Problem scheinbar auch nicht ganz verstanden:

    Was ich um wandeln möchte ist folgendes:

    Ich habe ein StringArray mit binärem Inhalt. z.B. BinArray[]=(10000110,11011011,00110001,00001000) und diesen will ich umwandeln in ein StringArray mit hexadezimalem Inhalt also hier HexArray[]=(86,DB,31,08)

    Ich hoffe mein Prob wurde deutlich genug!!

    Bis denn



  • public class BinaryDemo
    {
    	public String binToHex (String binaryString) {
    		String hexArray[] = new String[] {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"};
    		StringBuffer buffer = new StringBuffer();
    		String dummyString = new String();
    		buffer.append("0x");
    		int step = 4;
    		for (int i=0; i<binaryString.length(); i+=4) {
    			dummyString = binaryString.substring(i, i+step);
    			int dummyInt = Integer.parseInt(dummyString, 2);
    			buffer.append(hexArray[dummyInt]);
    		}
    		return buffer.toString();
    
    	}
    
    	public static void main (String args[]) {
    		BinaryDemo demo = new BinaryDemo();
    		String binaryArray[] = new String[] {"10000110","11011011","00110001","00001000"}; 
    		String hexArray[] = new String[binaryArray.length];
    
    		for (int i=0; i<binaryArray.length; ++i) { 
        			hexArray[i] = new String(demo.binToHex(binaryArray[i]));	
        			System.out.println(binaryArray[i]+" is hex "+hexArray[i]);
        		}
        	}
    }
    

    Ich hoffe du meinst das ...



  • Yapp!!
    so ähnlich hatte ich es schon mit deinem anderen Prog hinbekommen!!
    Jetzt ist die Sache noch die: Mein StringArray in dem der binäre code steht wird aus einem String generiert und zwar als substrings der Länge acht!!
    Jetzt ist ja das Problem, wenn mein String nicht durch acht teilbar ist, müsste ich bis zur achstelligkeit mit Nullen auffüllen. Kann ich das mit ner If-Abfrage machen oder gibt es elegantere Mglkeiten.

    Zur verdeutlichung: Vorhandener String: 001101110110111101110111001
    daraus mach ich mir meinen substrings das StringArray[]=(00110111,01101111,01110111,001)
    damit hexmässig was ordentliches draus wird, sollte der letzte Eintrag des StringArray aufgefüllt werden zu 00000001 bzw 0001 !!!

    Und wieder zu Dank verpflichtet!!!



  • Wie wärs damit:

    public String binString2HexString(String binString) {
        int temp = 0;
        int i = binString.length() - 1;
        int powerOf2 = 1;
        while(i >= 0) {
            // habe den Fehler behoben
            temp += Integer.parseInt(new String(binString.charAt(i))) * powerOf2;
            powerOf2 *= 2;
            i--;
        }
        return Integer.toHexString(temp);
    }
    

    Dann sollte egal sein, wie lang dein String mit 01 Folgen ist.
    Habs allerdings nicht probiert 😃

    Komisches Highlighting - das sind doch Funktionen von Java 😕



  • Bei der Fülle von Methoden aus der Standard-API ist es unmöglich stets ein aktuelles Highlighting für alle zu haben 🙂



  • Schon klar - ich meinte auch eher, dass das char in charAt() gehighlightet wird. Wow cooles Wort 😃



  • Moin Moin,

    zu der Zeile
    "temp += Integer.parseInt(new String(binString.charAt(i))).intValue() * powerOf2; "
    bekomme ich immer die Fehlermeldung
    "int cannot be dereferenced"

    scheint doch ne härtere Nuss zu sein !! Hoffe weiterhin auf eure Hilfe!

    Irgendwann kann ich auch mal helfen!!



  • Integer.parseInt() liefert bereits einen int-Wert. Du kannst also das intValue() weglassen



  • Hoppla 😃

    Sorry das ist natürlich richtig. Das mir auch immer diese Flüchtigkeitsfehler unterlaufen müssen 😡 Aber ich hatte ja auch geschrieben, dass ichs nicht getestet habe. BTW - ich weiss deshalb auch nicht was dabei rauskommt 🙄 Aber auf der anderen Seite solltest du mit der Idee, die dahinter steht weiterkommen denk ich. Also wenns nicht funzt - dann nochma ran und "Tot allen Bugs!!!" 😉



  • Irgendwie ist das schon kein Brett mehr, vor meinem Kopf!!
    Also ich hab folgenden ProgCode:
    import java.lang.String;
    import java.io.*;
    class Eingabe
    {
    public static void main (String [] arguments)
    {
    BufferedReader console = new BufferedReader(new InputStreamReader(System.in));
    System.out.print("Bitte geben Sie Ihren Text ein: ");
    System.out.print(" ");
    String Input=null;
    char[] hexn="0123456789ABCDEF".toCharArray();
    String hex="";

    try{
    Input = console.readLine();
    }
    catch (IOException e) {Input = "<" + e + ">";}

    int length=Input.length();
    String [] d= new String[length];
    String [] k= new String[length];
    String Str = "";
    int g[]=new int [length];
    byte a[] = new byte[length];
    a=Input.getBytes();
    for (int h =0;h<length;h++)
    {
    g[h]=(int)(a[h]);
    if(g[h]<64){
    d[h]="0"+Integer.toBinaryString(g[h]);
    }
    else if(g[h]<32){
    d[h]="00"+Integer.toBinaryString(g[h]);
    }
    else if(g[h]<16){
    d[h]="000"+Integer.toBinaryString(g[h]);
    }
    else
    {
    d[h]=Integer.toBinaryString(g[h]);
    }
    }

    for (int i =0;i<length;i++)
    {
    int m=(length-1-i);
    k[i]=d[m];
    Str = Str +k[i];
    }

    int lgh = Str.length();
    //int n = ((lgh/8)+1);
    //String [] w= new String[n];
    System.out.println(Str);
    System.out.println(" ");
    String subStr = "";
    int anf = 0;
    int end = 0;

    if(lgh%8>0)
    {
    int n = ((lgh/8)+1);
    String [] w= new String[n];
    String[] last = new String[((lgh/8)+1)];
    for(int j=0; j<(lgh/8); j++)
    {
    anf = (lgh-(8*(j+1)));
    end = (lgh-(8j));
    subStr = Str.substring(anf, end);
    last[j] = subStr; //Integer.valueOf(subStr).intValue());
    subStr = "";
    }
    last[((lgh/8))] = Str.substring(0, (lgh%8));
    for(int r=0; r<=(lgh/8); r++)
    {
    w[r] = last[(lgh/8)-r];
    System.out.println(r+". Eintrag ist: "+last[r]);
    //System.out.println(r+". Eintrag ist: "+w[r]);
    }
    }
    else
    {
    int n = ((lgh/8));
    String [] w= new String[n];
    String[] last = new String[(lgh/8)];
    for(int j=0; j<(lgh/8); j++)
    {
    anf = (lgh-(8
    (j+1)));
    end = (lgh-(8*j));
    subStr = Str.substring(anf, end);
    last[j] = subStr;
    subStr = "";
    }
    for(int r=0; r<(lgh/8); r++)
    {
    w[r] = last[(lgh/8)-r];
    System.out.println(r+". Eintrag ist: "+last[r]);
    }
    }
    }
    }

    Wenn ich das gute Ding laufen lasse, passiert das:

    Eingabe über die Konsole z.B. werner
    dann wird Str ausgegeben zu 111001011001011101110111001011001011110111
    dann der Inhalt des Arrays
    0. Eintrag ist 11110111
    1. Eintrag ist 10110010
    .
    .
    .
    5. Eintrag ist 11

    so und aus diesen ArrayEinträgen will ich nun das
    0. in F7
    1. in C2
    .
    .
    5. in 03 um wandeln!!!

    Die 03 muss so entstehen weil ansich Array[5] = 00000011 sein sollte; das letzte Array also immer auf acht Stellen aufgefüllt werden sollte, wenn sich der String mal nicht durch acht teilen lässt!!

    Ich hoffe jetzt finden wir ne Lösung!!!!
    (Wir? was mache ich ausser fragen??))

    Take care!!


Anmelden zum Antworten