[java]String naar int (hexadecimaal)

Pagina: 1
Acties:

  • Rinusch
  • Registratie: Mei 2002
  • Laatst online: 24-05 07:17
ik wil uit een bestandje een poortnr uitlezen, maar deze is hexadecimaal, als ik die van string naar int converteer krijgt ik een numberformat exception,

dat terwijl als ik hem het getal rechtstreeks ingeeft (int i=0x378) hij het wel gewoon doet, wat doe ik fout??
Code:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import parport.ParallelPort;
import java.io.*;

class Shuvvport
{
    ParallelPort lpt1;
    int t;
    String data;

    Shuvvport(int aByte)
    {
        try
        {
            File tf = new File("poort.prt");
            FileReader fr = new FileReader(tf);
            BufferedReader in = new BufferedReader(fr);
            data = in.readLine();
            in.close();
        }
            catch(Exception e)
        {
            System.out.print("Prutser! Het bestand is er niet!");
        }
        System.out.println(data+ "  turd");

        t= Integer.parseInt(data);

        //t=0x378;
        ParallelPort lpt1 = new ParallelPort(t);
        lpt1.write(aByte);
    }
    public void poort(int s)
    {
        t=s;
    }
}


het gaat dus om dit stukje:
Java:
1
t= Integer.parseInt(data);


ps: Wie weet hoe ik dit op een mooie manier kan oplossen (jah hem de in gewoon voeren kan ook, maar ik moet er in kunnen veranderen NA compilen :+

ps2: Ik weet dat er veel in de search te vinden is over String -->int en vise versa, maar das allemaal gewoon decimaal

... Life is what happens when you are busy planning other things...


  • Robtimus
  • Registratie: November 2002
  • Laatst online: 23-08 20:58

Robtimus

me Robtimus no like you

Uit de API van Integer.parseInt(String):
Parses the string argument as a signed decimal integer. The characters in the string must all be decimal digits, except that the first character may be an ASCII minus sign '-' ('\u002D') to indicate a negative value.
M.a.w. die x mag er zo niet inzitten.
Probeer eens Integer.parseInt(String,int), die int is de radix die in de functie zonder int standaard op 10 staat.
Kijk eens hier:
http://java.sun.com/j2se/1.4/docs/api, dan bij Integer.parseInt(String, int)

PS: je bent wel erg kortzichtig in het afvangen van je excepties: welke exceptie er ook wordt gegenereerd, je gaat er vanuit dat het komt omdat de file niet bestaat. Misschien gaat er wel iets fout met het lezen of zo?

[ Voor 19% gewijzigd door Robtimus op 16-03-2003 19:35 ]

More than meets the eye
There is no I in TEAM... but there is ME
system specs


  • Rinusch
  • Registratie: Mei 2002
  • Laatst online: 24-05 07:17
IceManX schreef op 16 maart 2003 @ 19:31:

PS: je bent wel erg kortzichtig in het afvangen van je excepties: welke exceptie er ook wordt gegenereerd, je gaat er vanuit dat het komt omdat de file niet bestaat. Misschien gaat er wel iets fout met het lezen of zo?
het was ook alleen maar ff een test, er word gewerkt aan het geheel, als je goed kijkt zie je dat er een print in de console komt van wat hij inleest, das voor mij genoeg om te zien waar het mis gaat


het is namelijk helemaal niet de bedoeling dat de gebruiker aan het bestand komt, het is een permanente opslag van het poortadres

... Life is what happens when you are busy planning other things...


Verwijderd

Ik heb ff een klein proggie geschreven:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class Temp
{
    int i = 0;
    String s = "0x378";
    public Temp()
    {
        for(int j=0;j<50;j++)
        {
            try
            {
                i = Integer.parseInt(s,j);
                System.out.println(j);
                System.out.println(s);
            }
            catch(Exception e){}
        }
    }
}


Als je dit runt komt eruit dat je je string kan ombouwen naar int met de volgende java:

PHP:
1
2
3
Integer.parseInt("string",34);
Integer.parseInt("string",35);
Integer.parseInt("string",36);


kies er maar 1 en vraag me niet hoe wat en waarom :P
het is trouwens geen php, maar ik weet niet hoe je je java code anders kan laten zien

[ Voor 12% gewijzigd door Verwijderd op 16-03-2003 20:06 ]


  • Rinusch
  • Registratie: Mei 2002
  • Laatst online: 24-05 07:17
Verwijderd schreef op 16 March 2003 @ 20:04:
Ik heb ff een klein proggie geschreven:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class Temp
{
    int i = 0;
    String s = "0x378";
    public Temp()
    {
        for(int j=0;j<50;j++)
        {
            try
            {
                i = Integer.parseInt(s,j);
                System.out.println(j);
                System.out.println(s);
            }
            catch(Exception e){}
        }
    }
}


Als je dit runt komt eruit dat je je string kan ombouwen naar int met de volgende java:

PHP:
1
2
3
Integer.parseInt("string",34);
Integer.parseInt("string",35);
Integer.parseInt("string",36);


kies er maar 1 en vraag me niet hoe wat en waarom :P
het is trouwens geen php, maar ik weet niet hoe je je java code anders kan laten zien
werken geen van allen, ik moet er namelijk ook 0x378 aan overhouden (het adress van LPT1) kan helaas nix in de klassen erachter veranderen
omdat dat naar native grijpt

even voor de dudelijkheid

Als ik Parallelport(int portbase)
de int 0x378 meegeef werkt het wel de int bestaat dus ui dit "getal": 0x378

[ Voor 10% gewijzigd door Rinusch op 16-03-2003 20:22 ]

... Life is what happens when you are busy planning other things...


  • Lone Gunman
  • Registratie: Juni 1999
  • Niet online
icemanx geeft het antwoord toch al ? :)

het volgende zou gewoon moeten werken iig:

String s = "378";
int ioaddr;
ioaddr = Integer.parseInt(s, 16);

je moet dus die 0x strippen uit de string.
en met de radix 16 geef je aan dat het getal in de string hexadecimaal genoteerd is.

trouwens, de int die je meegeeft bestaat niet uit het getal "0x378", maar 378 is de waarde van de int hexadecimaal uitgedrukt.
het volgende werkt namelijk ook:

int ioaddr = 888;
Parallelport(ioaddr);

[ Voor 29% gewijzigd door Lone Gunman op 16-03-2003 22:00 ]

Experience has taught me that interest begets expectation, and expectation begets disappointment, so the key to avoiding disappointment is to avoid interest.


  • Rinusch
  • Registratie: Mei 2002
  • Laatst online: 24-05 07:17
Lone Gunman schreef op 16 maart 2003 @ 21:50:
icemanx geeft het antwoord toch al ? :)

het volgende zou gewoon moeten werken iig:

String s = "378";
int ioaddr;
ioaddr = Integer.parseInt(s, 16);

je moet dus die 0x strippen uit de string.
en met de radix 16 geef je aan dat het getal in de string hexadecimaal genoteerd is.

trouwens, de int die je meegeeft bestaat niet uit het getal "0x378", maar 378 is de waarde van de int hexadecimaal uitgedrukt.
het volgende werkt namelijk ook:

int ioaddr = 888;
Parallelport(ioaddr);
De uiteindelijke int moet weer van string naar exact deze waarde: "0x378"
anders zou het probleem al opgelost wezen idd

... Life is what happens when you are busy planning other things...


  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

Gebruik dan java.lang.Integer.toString(int i, int radix)

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


  • Rinusch
  • Registratie: Mei 2002
  • Laatst online: 24-05 07:17
mithalph schreef op 16 March 2003 @ 22:10:
Gebruik dan java.lang.Integer.toString(int i, int radix)
Dat maakt er toch een String van?
dat moek juist niet hebben, String heb ik, int moet ik hebben
Dit is het geval:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import parport.ParallelPort;
import java.io.*;

class Shuvvport
{
    ParallelPort lpt1;
    int t;
    String data;

    Shuvvport(int aByte)
    {
        try
        {
            File tf = new File("poort.prt");
            FileReader fr = new FileReader(tf);
            BufferedReader in = new BufferedReader(fr);
            data = in.readLine();
            in.close();
        }
            catch(Exception e)
        {
            System.out.print("Prutser! Het bestand is er niet!");
        }
        System.out.println(data+ "werkt");

        //t= Integer.parseInt(data,16);  //werkt NIET
        System.out.println(t);
        t=0x378;                         //Werkt WEL
        ParallelPort lpt1 = new ParallelPort(t);
        lpt1.write(aByte);
    }
}

... Life is what happens when you are busy planning other things...


  • Rinusch
  • Registratie: Mei 2002
  • Laatst online: 24-05 07:17
Rinusch schreef op 16 maart 2003 @ 23:02:
[...]


Dat maakt er toch een String van?
dat moek juist niet hebben, String heb ik, int moet ik hebben
Dit is het geval:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import parport.ParallelPort;
import java.io.*;

class Shuvvport
{
    ParallelPort lpt1;
    int t;
    String data;

    Shuvvport(int aByte)
    {
        try
        {
            File tf = new File("poort.prt");
            FileReader fr = new FileReader(tf);
            BufferedReader in = new BufferedReader(fr);
            data = in.readLine();
            in.close();
        }
            catch(Exception e)
        {
            System.out.print("Prutser! Het bestand is er niet!");
        }
        System.out.println(data+ "werkt");   //geeft 0x378 

        //t= Integer.parseInt(data,16);  //werkt NIET
        System.out.println(t);
        t=0x378;                         //Werkt WEL
        ParallelPort lpt1 = new ParallelPort(t);
        lpt1.write(aByte);
    }
}

... Life is what happens when you are busy planning other things...


  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

Ik dacht dat je 't op het scherm wilde zetten, en daarom dacht dat het niet klopte want 888 != 378 :Y)

Mja, ik moet beter lezen.

Anyway,
Java:
1
2
3
4
String s = "378";
int d = Integer.parseInt(s,16); // d = 0x378 = 888 decimaal
System.out.println(d); // geeft 888 want decimaal
System.out.println(Integer.toString(d,16)); // geeft 378 want hexadecimaal

works like a charm here :?


edit: oh, wacht je parset dus de "0x378", maar je moet alleen de "378" parsen.

Java:
1
2
3
String s = "0x378";
String t = s.substring(2);
int d = Integer.parseInt(t,16);

[ Voor 23% gewijzigd door kenneth op 16-03-2003 23:13 ]

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


  • Rinusch
  • Registratie: Mei 2002
  • Laatst online: 24-05 07:17
Heb niet echt het idee dat dit gaat werken, is er nog een andere manier om een int op te slaan dan er een String van te maken en deze weg te schrijven in een txt ?

... Life is what happens when you are busy planning other things...


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 21:27

Creepy

Tactical Espionage Splatterer

Rinusch schreef op 17 March 2003 @ 07:56:
Heb niet echt het idee dat dit gaat werken, is er nog een andere manier om een int op te slaan dan er een String van te maken en deze weg te schrijven in een txt ?
Je krijgt een complete oplossing, maar je hebt het idee dat het niet gaat werken? Heb je het al geprobeerd? Wat gaat er mis? Krijg je foutmeldingen?

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • Rinusch
  • Registratie: Mei 2002
  • Laatst online: 24-05 07:17
hij maakt er een string van (toString() en het moet toch echt een int wezen


DoH mijn fout, indderdaad hij maakt er een een int van, leesfout
das dan ook weer opgelost :+

[ Voor 41% gewijzigd door Rinusch op 17-03-2003 11:51 . Reden: DOH ]

... Life is what happens when you are busy planning other things...


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 21:27

Creepy

Tactical Espionage Splatterer

Rinusch schreef op 17 March 2003 @ 11:50:
hij maakt er een string van (toString() en het moet toch echt een int wezen


DoH mijn fout, indderdaad hij maakt er een een int van, leesfout
das dan ook weer opgelost :+
Kan je meteen regel 1 uit je sig aanpassen ;)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney

Pagina: 1