20*375Wp met Enphase IQ7+ micro's | Stiebel Eltron HGE Water/Water WP 9kW | Tesla M3, powered by SmartEVSE | Servertje @ www.coloclue.net
Het lijkt me trouwens vreemd waneer het bij de Int32.Parse methode niet mogenlijk is om ook een base op te geven. Bij java's Integer.parseInt is dat bijvoorbeeld wel zo.
Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'
// decimale string naar int
int i1 = Int32.Parse("123");
MessageBox.Show(i1.ToString());
// hex string naar int
int i2 = Convert.ToInt32("FF", 16);
MessageBox.Show(i2.ToString());
// int naar hex
int i3 = 255;
string hex = i3.ToString("x");
MessageBox.Show(hex);
Misschien heb je hier iets aan?
Voor idiote talstelsels (septaal, ik verzin maar wat) kan je natuurlijk ook zelf even wat coden. Getal delen door base, rest opschrijven, herhaal tot getalletje nul, je kent het wel
Journalism is printing what someone else does not want printed; everything else is public relations.
Xplain...
Stel je hebt decimaal getal 456, je wilt binair...
456/2 = 228 rest 0
228/2 = 114 rest 0
114/2 = 57 rest 0
57/2 = 28 rest 1
28/2 = 14 rest 0
14/2 = 7 rest 0
7/2 = 3 rest 1
3/2 = 1 rest 1
1/2 = 0 rest 1
hee.... Wist k helemaal niet
Maar hoe doe je dat dan met HEX??
Ik wil 34B naar Dec hebben...
34B / 10 = ?? rest ??
[ Voor 93% gewijzigd door decramy op 14-01-2004 15:45 ]
20*375Wp met Enphase IQ7+ micro's | Stiebel Eltron HGE Water/Water WP 9kW | Tesla M3, powered by SmartEVSE | Servertje @ www.coloclue.net
Bij binair (2-tallig) deel je door 2. Waar zou je door moeten delen bij hexadecimaal (16-tallig)?decramy schreef op 14 januari 2004 @ 15:40:
Maar hoe doe je dat dan met HEX??
Ik wil 34B naar Dec hebben...
34B / 10 = ?? rest ??
Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'
Verwijderd
Niet 0x34B / 0x10 maar 0x34B / 0xA.decramy schreef op 14 januari 2004 @ 15:40:
Huh? Delen, rest weer delen??
Xplain...
Stel je hebt decimaal getal 456, je wilt binair...
456/2 = 228 rest 0
228/2 = 114 rest 0
114/2 = 57 rest 0
57/2 = 28 rest 1
28/2 = 14 rest 0
14/2 = 7 rest 0
7/2 = 3 rest 1
3/2 = 1 rest 1
1/2 = 0 rest 1
hee.... Wist k helemaal niet
Maar hoe doe je dat dan met HEX??
Ik wil 34B naar Dec hebben...
34B / 10 = ?? rest ??
Dus:
0x34B / 0xA = 0x54 r 0x3
0x54 / 0xA = 0x8 r 0x4
0x8 / 0xA = 0x0 r 0x8
Uitkomst: 843 decimaal
[ Voor 13% gewijzigd door Verwijderd op 14-01-2004 15:54 . Reden: Duidelijk gemaakt dat het om hex. gaat i.p.v. decimaal ]
Ja, maar hoe wil je C# wijs maken dat het getalletje B ook een getal is?Janoz schreef op 14 januari 2004 @ 15:47:
[...]
Bij binair (2-tallig) deel je door 2. Waar zou je door moeten delen bij hexadecimaal (16-tallig)?
20*375Wp met Enphase IQ7+ micro's | Stiebel Eltron HGE Water/Water WP 9kW | Tesla M3, powered by SmartEVSE | Servertje @ www.coloclue.net
B is geen getal, 0xB weldecramy schreef op 14 januari 2004 @ 15:49:
[...]
Ja, maar hoe wil je C# wijs maken dat het getalletje B ook een getal is?
Zie ook RobIII in "Evaluatie: wat mis je in software voor p..." en verder (draad gaat compleet ergens anders over, maar is hiet wel van toepassing denk ik...Janoz schreef op 14 januari 2004 @ 14:33:
Een getal is een getal. Of je nu het ene getal bij het andere getal optelt in hex of binair, er komt nog steeds hetzelfde uit. Het niet in hex kunnen opslaan is onzin. Intern is het zelf binair opgeslagen! Het rekenen mbv talstelsel is alleen nodig bij het invoeren van getallen en het afdrukken van getallen. Daarbij is het trouwens onzin om eerst naar binair te gaan. Er is namelijk een heel simpel algoritme dat van het ene naar het andere gaat.
Het lijkt me trouwens vreemd waneer het bij de Int32.Parse methode niet mogenlijk is om ook een base op te geven. Bij java's Integer.parseInt is dat bijvoorbeeld wel zo.
Verder is het conversie algoritme dec->baseN->dec supersimpel. Hier een VB6 voorbeeldje dat ik een tijdje geleden eens heb gemaakt:
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
| Option Explicit Private Const BASENUMBERS As String = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" Public Function CnvDec2BaseN(ByVal dValue As Double, Optional ByVal byBase As Byte = 16) As String ' ===================================================================================== ' === Comments by CommentMaker === ' ===================================================================================== ' ' Functie : CnvDec2BaseN ' Datum/Tijd : maandag 28-aug-2000 / 12:47 ' Door : Rob ' ' Versie : 1.0 ' ' Omschrijving: ' ' Converteert een getal uit het decimaal stelsel naar een getal uit het (BASE) ' stelsel. Gebruik bijvoorbeeld Base 2 voor Binair, of Base 8 voor Octaal. Base 16 ' (Hexadecimaal) is default). Minimum base is 2, maximum is 36. Negatieve getallen ' worden positief! (Dit is GEEN BUG). ' ' ' Parameters : ' ' dValue - [Verplicht] Double Waarde te converteren ' byBase - [Optioneel] Byte Talstelsel ' ' Return : String ' ' Revisies : ' ' ===================================================================================== ' === Comments by CommentMaker === ' ===================================================================================== Dim sResult As String Dim dRemainder As Double On Error GoTo ErrorHandler sResult = "" If (byBase < 2) Or (byBase > 36) Then CnvDec2BaseN = sResult Exit Function End If dValue = Abs(dValue) Do dRemainder = dValue - (byBase * Int((dValue / byBase))) sResult = Mid$(BASENUMBERS, dRemainder + 1, 1) & sResult dValue = Int(dValue / byBase) Loop While (dValue > 0) CnvDec2BaseN = sResult Exit Function ErrorHandler: Err.Raise Err.Number, "CnvDec2BaseN", Err.Description End Function Public Function CnvBaseN2Dec(ByVal sValue As String, Optional ByVal byBase As Byte = 16) As Double ' ===================================================================================== ' === Comments by CommentMaker === ' ===================================================================================== ' ' Functie : CnvDec2BaseN ' Datum/Tijd : maandag 12-mei-2003 / 16:41 ' Door : Rob ' ' Versie : 1.0 ' ' Omschrijving: ' ' Converteert een getal uit het (BASE) stelsel naar een getal uit het decimaal ' stelsel. Gebruik bijvoorbeeld Base 2 voor Binair, of Base 8 voor Octaal. Base 16 ' (Hexadecimaal) is default). Minimum base is 2, maximum is 36. Negatieve getallen ' worden positief! (Dit is GEEN BUG). ' ' ' Parameters : ' ' sValue - [Verplicht] String Waarde te converteren ' byBase - [Optioneel] Byte Talstelsel ' ' Return : Double ' ' Revisies : ' ' ===================================================================================== ' === Comments by CommentMaker === ' ===================================================================================== Dim dValue As Double Dim T As Integer On Error GoTo ErrorHandler If (byBase < 2) Or (byBase > 36) Then CnvBaseN2Dec = 0 Exit Function End If dValue = 0 For T = Len(sValue) To 1 Step -1 dValue = dValue + ((InStr(BASENUMBERS, Mid$(sValue, T, 1)) - 1) * (byBase ^ (Len(sValue) - (T)))) Next CnvBaseN2Dec = dValue Exit Function ErrorHandler: Err.Raise Err.Number, "CnvBaseN2Dec", Err.Description End Function |
Schrik niet van de "lap code", het meeste is comments
En dit kan nog mooier/sneller/simpeler met een meer algemeen algoritme, maar die zijn zat @internet te vinden... en vast ook voor C#
[ Voor 6% gewijzigd door RobIII op 14-01-2004 16:06 ]
There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.
Je eigen tweaker.me redirect
Over mij
Nu heb ik een Textbox (string) die ik doormiddel van Radiobuttons om wil zetten.
ik heb dit:
1
2
3
| this.radioHex.Leave += new System.EventHandler(this.radioHex_CheckedLeave); this.radioOct.CheckedChanged += new System.EventHandler(this.radioOct_CheckedChanged); |
Ik wil nu dus in this.radioHex_CheckedLeave de huidige stand van zaken in this.Textbox.Text omzetten in het decimale talstelsel en weer in this.Textbox.Text stoppen. Daarna wil ik bij this.radioOct_CheckedChanged de decimale waarde uit this.Textbox.Text omzetten in Oct, en weer in this.Textbox.Text zetten...
Maar het lukt me gewoon niet... Geef me es een hint...
20*375Wp met Enphase IQ7+ micro's | Stiebel Eltron HGE Water/Water WP 9kW | Tesla M3, powered by SmartEVSE | Servertje @ www.coloclue.net
“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”
en omzetten van oct naar bin gaat:
1
2
3
4
5
6
7
8
9
10
11
| int begin, rest, eind; string s = ""; eind = Convert.ToInt32(this.textBox.Text); while(eind != 0) { begin = eind; rest = begin | 8; eind = begin / 8; s = s + Convert.ToString(rest); } this.textBox.Text = s; |
en dec naar bin moet je de 8 vervangen door 10...
Volgens mij komt het te dagen...
Alleen nu weer andersom... Van bin naar hex/dec/oct...
En nog steeds van Hex naar Bin...
Waar staan dit soort dingen uitgelegd?? Bij PHP heb je een goede documentatie op php.net. Heb je voor C# ook zoiets??
[ Voor 98% gewijzigd door decramy op 15-01-2004 09:01 ]
20*375Wp met Enphase IQ7+ micro's | Stiebel Eltron HGE Water/Water WP 9kW | Tesla M3, powered by SmartEVSE | Servertje @ www.coloclue.net
“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”
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
| HP38AscD 16 Binaire Getallen1\|>A: 0\|>B: 0\|>C: 0\|>D: CHOOSE A;"Methode";"Binair\->Decimaal";"Decimaal\->Binair": CASE IF A==1 THEN INPUT B;"Binaire Getallen";"Binair";"Voer Binair getal in";0: DO B/10\|>B: IF TRUNCATE(FRAC(B),1)*10==1 THEN (2^C)+D\|>D: END: C+1\|>C: UNTIL INT(B)==0 END: ERASE: DISP 3;" "D: FREEZE: END IF A==2 THEN INPUT B;"Decimale Getallen";"Decimaal";"Voer Decimaal getal in";0: DO IF FRAC(B/2)\=/0 THEN (1*(10^C))+D\|>D: (B-1)/2\|>B: IF B==0 THEN BREAK END: C+1\|>C: END: IF FRAC(B/2)==0 THEN B/2\|>B: C+1\|>C: END: UNTIL B==0 END: ERASE: DISP 3;" "D: FREEZE: END END: |
Zeg nee tegen bloatware. Download Nero Lite!