moin
ich will mir einen Zeichensatzt mit 6Bit proggen
aber weiss nicht wie ich Bit's auslessen kan
PeekBit() ?
-
- Beiträge: 115
- Registriert: 09.07.2005 12:11
- Wohnort: Fürstenwald [Internat], Berlin[wen keine lust auf Internat], Wildau[Einfamilienhaus]
- Kontaktdaten:
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Versuchs mal hiermit:
Die 2te Procedure ist Dein PeekBit 
Code: Alles auswählen
Procedure.l SetBit(nValue.l, nBitNumber.l, nBoolean.l)
nBitNumber = 1 << nBitNumber
If nBoolean
ProcedureReturn nValue | nBitNumber
Else
ProcedureReturn (nValue | nBitNumber) & ~nBitNumber
EndIf
EndProcedure
Procedure.l TestBit(nValue.l, nBitNumber.l)
If nValue & (1 << nBitNumber)
ProcedureReturn #True
Else
ProcedureReturn #False
EndIf
EndProcedure

PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

-
- Beiträge: 115
- Registriert: 09.07.2005 12:11
- Wohnort: Fürstenwald [Internat], Berlin[wen keine lust auf Internat], Wildau[Einfamilienhaus]
- Kontaktdaten:

kannst du mir den code bitte mal erklären
soweit ich den code interpretiere ist das nicht genz das was ich will
weil wen ich die VarType Byte nehme ist ja 00100010 = 34
und die beiden 00 am anfang kotzen mich an weil ich will nur 100010 im ram haben [2bit weniger] damit ich gleich danach meine nächte zahl schreiben kann
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
SetBit()
Syntax
Result = SetBit(Value.l, BitNumber.l Flag.l)
Beschreibung
Setzt das Bit im Wert auf den Wert von Flag (1 oder 0).
TestBit()
Syntax
Result = TestBit(Value.l, BitNumber.l)
Beschreibung
Prüft, ob das angegebene Bit im Wert gesetzt ist
Code: Alles auswählen
Procedure.l SetBit(nValue.l, nBitNumber.l, nBoolean.l)
nBitNumber = 1 << nBitNumber
If nBoolean
ProcedureReturn nValue | nBitNumber
Else
ProcedureReturn (nValue | nBitNumber) & ~nBitNumber
EndIf
EndProcedure
Procedure.l TestBit(nValue.l, nBitNumber.l)
If nValue & (1 << nBitNumber)
ProcedureReturn #True
Else
ProcedureReturn #False
EndIf
EndProcedure
a = %1111
Debug Bin(a)
a = SetBit(a, 0, 0) ; letztes Bit von a auf 0 Setzen
Debug Bin(a)
If TestBit(a, 0) ; dürfte nicht kommen
MessageRequester("", "letztes Bit von a gesetzt: a=" + Bin(a))
Else ; diese Meldung sollte kommen
MessageRequester("", "letztes Bit von a nicht gesetzt: a=" + Bin(a))
EndIf
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Also du hast eine Folge von 6-Bit-Einheiten über die Byte-Grenzen hinweg?IcedCoffee hat geschrieben:... weil ich will nur 100010 im ram haben [2bit weniger] damit ich gleich danach meine nächte zahl schreiben kann
Um 6 Bits zu lesen brauchst du eine Maske, also eine Variable, bei der genau die gewünschten Bits an sind.
Du fängst an mit der Maske %111111 in der Variablen Maske.l
Die ersten 6 Bits an der Adresse *Pointer erhältst du dann mit:
Code: Alles auswählen
Zeichen = PeekL(*Pointer) & Maske
Code: Alles auswählen
Maske << 6
Zeichen = PeekL(*Pointer) & Maske
Zeichen >> 6
Das Ganze setzt freilich voraus, dass die ersten 6 Bits an einer Adresse (also das erste Zeichen) die niederwertigen Bits in einem Byte sind.
horst
- Froggerprogger
- Badmin
- Beiträge: 855
- Registriert: 08.09.2004 20:02
Wenn Du in einem größeren Speicherbereich (bis 2GB) Bits einzeln ansprechen und lesen/setzen möchtest, schau auch mal hier:
http://forums.purebasic.com/german/arch ... ht=peekbit
http://forums.purebasic.com/german/arch ... ht=peekbit
!UD2