StringInhalt umwandeln



  • 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!!



  • Bitte Code-Tags verwenden das erhöht die Lesbarkeit.



  • Ich versteh nix mehr 😞

    Versuch nochmal genau zu erklären, was du machen willst und benutze wie CengizS schon sagte die Code- bzw. Java-Tags. Ein paar Einrückungen sind auch nicht verkehrt 😉

    basedow



  • Moin,
    keine Ahnung, warum das so dargestellt wurde!!?? Hab ich aus meinem Editor kopiert. Naja, neuer Versuch!!

    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(); 
    
       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-(8*j)); 
        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]); 
       } 
      } 
      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]); 
       } 
      } 
     } 
    }
    

    Also was ich genau machen muss:

    der eingegeben Text wird in ein CharArray eingelesen und dann in Bin-Code umgewandelt. (ASCII-Code)
    Dann schreib ich dafraus einen grussen String. Dieser wird in achtel aufgeteilt!!. und in ein STringArray geschrieben. Jetzt müsste falls die Division nicht aufgeht, das letzte Array mit Nullen eufgefüllt werden, damit auch dieser Eintrag achtstellig wird.
    Dann sollen diese achstelligen binären StringArrayEinträge in HexEinträge umgewandelt werden.



  • Also:

    Ich habe doch eine Methode gepostet, die aus einem beliebig langen BinString (<- wie du ihn nennst) einen HexString macht. Nochmal: ich habs nicht getestet, aber da der CengizS auch nix angemerkt hat (ausser natürlich dem Fehler, der aber bereits behoben ist), gehe ich erstmal davon aus, dass sie auch funzt. Also mach dir keine Sorgen über diese Auffühlaktion.

    Ich verstehe immer noch nicht warum der ganze Aufwand betrieben werden soll, aber das geht mich ja auch eigentlich nix an.

    Nimm doch einfach deinen gesamten BinString und zerleg ihn wie auch immer es dir gefällt. Dann nimmst du die Schnippsel und nudelst sie durch die Methode, die ich gepostet habe. Dann kommt hinten ein HexString für den jeweiligen BinString-Schnippsel raus. Mit dem HexString machst du weiter wie es deine Anwendung verlangt. Fertig!!!

    Wenn ich das so halbwegs verstanden habe, dann willst du Text in Hex umwandeln. Also nimm einfach jedes Zeichen und mach ein int oder ein byte draus oder so und dann erst durch die Methode.



  • basedow schrieb:

    [...]ich habs nicht getestet, aber da der CengizS auch nix angemerkt hat (ausser natürlich dem Fehler, der aber bereits behoben ist) [...]

    Ich ebenfalls nicht - habe nur den offensichtlichen Fehler angemerkt 🙂



  • @CengizS: Dir entgeht wohl auch nix wie??? 😉



  • Ich beantrage hiermit eine Änderung im Protokoll:

    basedow schrieb:

    [...] gehe ich erstmal davon aus, dass sie auch funzt.[...]

    sollte heissen:

    [...]gehe ich erstmal davon aus, das keine offentsichtlichen Fehler drin sind und hoffe weiterhin, dass sie funzt.[...]

    Gut so??? 😉



  • Sehr gut 😉


Anmelden zum Antworten