Hexwerte bitte in Decimal umwandeln.

Für allgemeine Fragen zur Programmierung mit PureBasic.
funkheld
Beiträge: 647
Registriert: 31.12.2009 11:58

Hexwerte bitte in Decimal umwandeln.

Beitrag 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.
berie
Beiträge: 75
Registriert: 17.01.2018 08:52
Computerausstattung: Windows 11 64 bit, i7, 16GB RAM
Wohnort: Wesertal in Nordhessen

Re: Hexwerte bitte in Decimal umwandeln.

Beitrag 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
formerly known as bizzl
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8807
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Hexwerte bitte in Decimal umwandeln.

Beitrag 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.
funkheld
Beiträge: 647
Registriert: 31.12.2009 11:58

Re: Hexwerte bitte in Decimal umwandeln.

Beitrag 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)
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8807
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Hexwerte bitte in Decimal umwandeln.

Beitrag 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.
berie
Beiträge: 75
Registriert: 17.01.2018 08:52
Computerausstattung: Windows 11 64 bit, i7, 16GB RAM
Wohnort: Wesertal in Nordhessen

Re: Hexwerte bitte in Decimal umwandeln.

Beitrag 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.
formerly known as bizzl
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8807
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Hexwerte bitte in Decimal umwandeln.

Beitrag von NicTheQuick »

Es ist faszinierend wie viele Leute mich hier falsch schreiben. :lol:
berie
Beiträge: 75
Registriert: 17.01.2018 08:52
Computerausstattung: Windows 11 64 bit, i7, 16GB RAM
Wohnort: Wesertal in Nordhessen

Re: Hexwerte bitte in Decimal umwandeln.

Beitrag von berie »

Sorry!
formerly known as bizzl
Antworten