Seite 1 von 1

Hexwerte bitte in Decimal umwandeln.

Verfasst: 12.11.2023 10:49
von funkheld
Hallo, guten Tag.

Ich habe bitte 256 Farbwerte in Hex für die VGA-Karte RGB in diesem Format.

000000
0000aa
00aa00
00aaaa
aa0000
aa00aa
aa5500
aaaaaa
555555
..........
..........
Ich möchte die bitte umwandeln in Decimal in diesem Format:
0 186 73
..........
.........

Wie geht das bitte mit nur Einlesen und Ausgabe als Text?

Danke.

Re: Hexwerte bitte in Decimal umwandeln.

Verfasst: 12.11.2023 11:18
von berie
Quick'n'dirty:
So ungefähr?

Code: Alles auswählen

EnableExplicit
Global r,g,b,c,d

For c=0 To 8
  Read d
  b=d&$ff
  g=(d>>8)&$ff
  r=(d>>16)&$ff
  Debug Str(r)+" "+Str(g)+" "+Str(b)
Next

DataSection
  Data.i $0,$0000aa,$00aa00,$00aaaa,$aa0000,$aa00aa,$aa5500,$aaaaaa,$555555
EndDataSection

Re: Hexwerte bitte in Decimal umwandeln.

Verfasst: 12.11.2023 13:19
von NicTheQuick
Wenn es Strings sind, dann zum Beispiel so:

Code: Alles auswählen

Define rgbLine.s, rgbValue.l
Restore rgbLines
Repeat
	Read.s rgbLine
	If rgbLine = "": Break: EndIf
	rgbValue = Val("$" + rgbLine)
	Debug "" + Red(rgbValue) + " " + Green(rgbValue) + " " + Blue(rgbValue)
ForEver

DataSection
	rgbLines:
		Data.s "000000"
		Data.s "0000aa"
		Data.s "00aa00"
		Data.s "00aaaa"
		Data.s "aa0000"
		Data.s "aa00aa"
		Data.s "aa5500"
		Data.s "aaaaaa"
		Data.s "555555"
		Data.s ""
EndDataSection
Aber funkheld, eigentlich müsstest du das doch schon können. Du bist doch schon lange hier mit dabei.

Re: Hexwerte bitte in Decimal umwandeln.

Verfasst: 12.11.2023 14:57
von funkheld
Danke für die Info.
So ganz funktioniert es noch nicht , weil ich einen String einlese.
d=Read....... da meckert Purebasic rum.

Danke.

Code: Alles auswählen

Global r,g,b,c,d

ReadFile(0, "d:\dospbgeos\vgapalette-umw1.txt")
CreateFile(1,"d:\dospbgeos\vga.pal")

While Eof(0) = 0
For c=0 To 8
  d=Read.......???
  b=d&$ff
  g=(d>>8)&$ff
  r=(d>>16)&$ff
  Debug Str(r)+" "+Str(g)+" "+Str(b)
Next

Wend

CloseFile(0)
CloseFile(1)

Re: Hexwerte bitte in Decimal umwandeln.

Verfasst: 12.11.2023 15:02
von NicTheQuick
Nutze dafür meine Variante. Und wenn du aus Dateien liest, weißt du doch schon lange, was du benötigst. Schau einfach nochmal in die Hilfe. ReadFile() hast du ja auch selbstständig gefunden.

Re: Hexwerte bitte in Decimal umwandeln.

Verfasst: 12.11.2023 19:34
von berie
Ich habe da mal was gebaut:

Code: Alles auswählen

EnableExplicit
Global.s RGBWerte="H:\PureBasic Programme\rgb.txt"  ;<--- Hier deinen Dateipfad eintragen
Global.l Farbe

If ReadFile(1,RGBWerte) ;Die For...Next-Schleife in meinem ersten Post war zum Einlesen der Datazeile(n) gedacht.
  While Not Eof(1)  ;Alle Daten lesen bis Dateiende
    Farbe=Val("$"+ReadString(1))  ;Hier habe ich mich von NikTheQuick inspirieren lassen 
    				  ; - ist hoffentlich okay für dich, NikTheQuick ?
    Debug Str(Red(Farbe))+" "+Str(Green(Farbe))+" "+Str(Blue(Farbe)) ;ist einfacher als meine Bitschiebereien. Danke NikTheQuick
  Wend
  CloseFile(1)
EndIf
Ich habe die Daten aus deinem ersten Post genommen und gespeichert unter "H:\PureBasic Programme\rgb.txt"

Code: Alles auswählen

000000
0000aa
00aa00
00aaaa
aa0000
aa00aa
aa5500
aaaaaa
555555
Aber, wie NickTheQuick schon schrieb, die Hilfe hilft da weiter.

Re: Hexwerte bitte in Decimal umwandeln.

Verfasst: 13.11.2023 09:38
von NicTheQuick
Es ist faszinierend wie viele Leute mich hier falsch schreiben. :lol:

Re: Hexwerte bitte in Decimal umwandeln.

Verfasst: 13.11.2023 10:15
von berie
Sorry!