Toon posts:

[java] hex-string naar nummer werkt niet?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik probeer een omgekeerde hexadecimale achtige string te converteren naar het nummer. De hexstring is altijd 8 characters, bestaande uit [0-9|A-F].
code:
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
    private int
    string2number (char data[])
    {
        int number = 0;
        char fourbits;
        char num2char[] = { '0', '1', '2', '3',
                            '4', '5', '6', '7',
                            '8', '9', 'A', 'B',
                            'C', 'D', 'E', 'F' };
        
        for (int i=0;i<8;i++)
        {
            fourbits = data[i];
            for (int n=0;n<16;n++)
            {
                if (fourbits == num2char[n])
                {
                    number += (n*(16^i));
                    break;
                }
                //... hier komt dus een exception
            }
        }
        
        return number;
    }

Echter, als ik "F2000000" erin gooi, krijg ik 274 :?. Als ik "number += (n*(2^(4*i)));" gebruik, dan komt er opeens 42 uit. Er moet toch echt 47 uitkomen.

Ben ik nou zo dom of :?

  • Sjaaky
  • Registratie: Oktober 2000
  • Laatst online: 03-09 23:48
De ^ operator is toch een XOR? :?

  • Xanthus
  • Registratie: Februari 2002
  • Laatst online: 11-07 12:45

Verwijderd

Topicstarter
Op woensdag 27 maart 2002 14:15 schreef Sjaaky het volgende:
De ^ operator is toch een XOR? :?
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH dat meen je niet :'(

/me pakt de Math class er maar even bij :{
Op woensdag 27 maart 2002 14:16 schreef Xanthus het volgende:
Dit is wel wat voor jou:
http://java.sun.com/j2se/1.4/docs/api/java/lang/Integer.html#parseInt(java.lang.String, int)
of wil je het perse zelf doen?
parseInt is geloof ik voor integers, niet voor hex-getallen uit een string halen... Of ook voor hex :?

<font color=red>zo beter??.. D2k edit..... maar na de Janoz-edit is het wel goed.... ff de [ /me] voor de smilie gezet</font>

  • Sjaaky
  • Registratie: Oktober 2000
  • Laatst online: 03-09 23:48
Machtsverheffen in java gaat met Math.pow( getal, macht );
parseInt is hier inderdaad goed voor te gebruiken. In jouw geval hoeft de string alleen even gereversed te worden, voordat hij parseInt(getal, 16) in kan.

Verwijderd

Topicstarter
Als ik "number += (n*Math.pow(16,i));" gebruik werkt het wel :D /me *

Vreemd dat ^ geen machtsverheffen is, zoals in C.... Mjah, java is vreemd :P

  • Sjaaky
  • Registratie: Oktober 2000
  • Laatst online: 03-09 23:48
Op woensdag 27 maart 2002 14:31 schreef beelzebubu het volgende:
Vreemd dat ^ geen machtsverheffen is, zoals in C.... Mjah, java is vreemd :P
Hmm in mijn gcc is ^ ook de xor-operator en moet ik pow(a,b) gebruiken voor machtsverheffen.
* Sjaaky had liever ** gezien voor machtsverheffen.

Verwijderd

Topicstarter
bij mij ook, merk ik net |:( :X :P

Nouja, ik gebruik over het algemeen toch << of >> voor 2^n dingen... Werken die ook in java :? (heb ff geen java compiler voor mijn neus om te testen)

  • Sjaaky
  • Registratie: Oktober 2000
  • Laatst online: 03-09 23:48
Ja << en >> werken ook in java.
* Sjaaky vind het best wel slecht van zichzelf dat hij dit was vergeten :)

  • xoror
  • Registratie: November 1999
  • Niet online
Op woensdag 27 maart 2002 14:48 schreef Sjaaky het volgende:

[..]

...
* Sjaaky had liever ** gezien voor machtsverheffen.
en hoe wil je dan een pointer naar een pointer definieren ?

Mitsubishi Warmtepomp Uitlezen / Besturen | Optimaliseren


  • Jelmer
  • Registratie: Maart 2000
  • Laatst online: 05:49
xoror, uh mijn c/c++ kennis is summier maar ik kan je wel vertellen dat char** bla heel wat anders is (kan zijn) dan int i=2**5...

maar je kunt Integer.parseInt(String s, int radix) gewoon gebruiken om Hex te parsen hoor... zie de docs maar..
code:
1
parseInt("-FF", 16) returns -255

Om je string om te draaien kun je gebruik maken van: StringBuffer(String).reverse().toString();

Verwijderd

Topicstarter
Op woensdag 27 maart 2002 15:18 schreef xoror het volgende:

[..]

en hoe wil je dan een pointer naar een pointer definieren ?
Zelfde als dat <num>*<num> vermenigvuldige is en *<object> een pointer :?

  • Sjaaky
  • Registratie: Oktober 2000
  • Laatst online: 03-09 23:48
Je gebruikt de * nu ook voor vermenigvuldigen en als dereference voor een pointer. De * voor vermenigvuldigen is binary en * van een pointer is unary. Als ** voor machtverheffen gaat gebruiken moet er alleen onderscheid gemaakt gaan worden tussen
a * *ptrToInt en a **ptrToInt.

Dan krijg je ongeveer hetzelfde als bij templates met
vector<vector<int>> en vector<vector<int> >.

Maar daar had ik inderdaad even geen rekening meegehouden.

  • xoror
  • Registratie: November 1999
  • Niet online
Op woensdag 27 maart 2002 15:26 schreef Jelmer Barhorst het volgende:
xoror, uh mijn c/c++ kennis is summier maar ik kan je wel vertellen dat char** bla heel wat anders is (kan zijn) als int i=2**5...
Mjah, is gewoon niet mooi. Je compiler moet dan voor de ene keer snappen dat ** machtverheffen is, en de andere keer pointer naar pointer.

(overigens doen ze dat nu dus ook voor *. de parser kan aan de hand van notatie wel een en ander opmaken)

Mitsubishi Warmtepomp Uitlezen / Besturen | Optimaliseren

Pagina: 1