16. november 2003 - 19:11
Der er
19 kommentarer og 1 løsning
Hex til int med minus-tal
Jeg bruger følgende kode til at omdanne int til hex og omvendt. Integer.toHexString(-1894216036); Integer.parseInt("8f188e9c", 16); Det virker upåklageligt, undtagen når jeg som i eksemplet herover, prøver at omvende et minus-hex-tal til den tilsvarende int. Så kaster parseInt en NumberFormatException. Hvad skal jeg gøre i stedet, for at omdanne en hex der repræsenterer et minus-tal?
Annonceindlæg tema
Offentlig digitalisering
Fra effektivisering til digital suverænitet. Hvordan skaber det offentlige en digital fremtid med AI, sikkerhed og kontrol i centrum?
16. november 2003 - 19:17
#1
Prøv evt. med: (int)Long.parseLong("8f188e9c", 16)
16. november 2003 - 19:20
#2
Det virkede :)
16. november 2003 - 19:20
#3
Ingen minus antyder positiv og positiv 0x8f188e9c kan ikke være i en int.
16. november 2003 - 19:20
#4
hexadecimale tal er altid 'unsigned' de er pr definition positive. så hvor 'decimale' værdier gpr fra Integer.MIN_VALUE 10000000 00000000 00000000 00000000 til Integer.MAX_VALUE 01111111 11111111 11111111 11111111 går hexadecimale tal fra zero 00000000 00000000 00000000 00000000 11111111 11111111 11111111 11111111 mvh JakobA
16. november 2003 - 19:21
#5
OK ?
16. november 2003 - 19:24
#6
Okay ... men (int)Long.parseLong("8f188e9c", 16) giver et negativt tal - hvordan kan den det hvis hexadecimale tal altid er positive pr. definition?
16. november 2003 - 19:24
#7
Ja, du skal have mange tak, arne
16. november 2003 - 19:27
#8
Type casten fra long til int konverterer en positiv long til en negativ int !
16. november 2003 - 19:28
#9
fordi (int) castingen blot klipper de ekstra bit af. hvis det der er tilbage starter med en 1-bit er det et negativt tal.
16. november 2003 - 19:33
#10
hmm, det lyder som noget værre rod
16. november 2003 - 19:35
#11
(int)Long.parseLong("56ced41c", 16) giver 1456395292 Det er et positivt tal ...
16. november 2003 - 19:39
#12
Jeg har udtrykt mig forkert. Type casten fra long til int konverterer en positiv long til en negativ int, hvis det 8. hexadecimale ciffer fra højre af er 8-F. Og det var det i dit oprindelige eksempel. Og det vil det være for alle negative int.
16. november 2003 - 19:41
#13
Ahh ok, det andet lød også lidt spøjst. Tak.
16. november 2003 - 19:57
#14
Iøvrigt er unsigned data typer nok det jeg savner allermest i Java.
16. november 2003 - 20:21
#15
Var lige inde og checke om byte virkelig var en signed type (og arne-v har søreme ret, det er det.) men kik her: en meget nemmere måde at stoppe et hex-tal i en integer: public static final int MIN_VALUE = 0x80000000; skrevet med hexnotation ('0x' forrest) bliver det bare læst ind selvom resultatet er negativt.
16. november 2003 - 20:52
#16
Jeg tror ikke jeg forstår. Hvad er måden?
16. november 2003 - 21:09
#17
måden var et håb om at det kunne bruges; men det duer kun på compiletime. til runtime får jeg den samme exception som du når det ikke er arnes linie.
17. november 2003 - 23:03
#18
Jeg har fået at vide at 46821303 skal give 02ca6fb7 i hexadecimale tal, men når jeg bruger Integer.toHexString(46821303) får jeg 2ca6fb7. Kan man altid bare sætte 0 foran et hexadecimalt tal, og så tæller det ikke med, ligesom ved almindelige tal (0034 er det samme som 34)?
17. november 2003 - 23:08
#19
0x1 og 0x00000001 er samme tal. 0034 er 28 (tal der starter med nul er oktaler)
17. november 2003 - 23:20
#20
ok, tak
Kurser inden for grundlæggende programmering