Code : Tout sélectionner
maValeur=SetBit(bitRange3.c,bitRange2.c,bitRange1.c,bitRange0.c)
La deuxième procédure permet de lire une des 4 valeurs
Code : Tout sélectionner
GetBitRangeValues(Values.l,Range)
Code : Tout sélectionner
EnableExplicit
Global V.l
Procedure.l SetBit(bitRange3.a,bitRange2.a,bitRange1.a,bitRange0.a)
Protected Values.a,N,ValReturn.l=0,tmp.a
If bitRange3>255 Or bitRange3<0
MessageRequester("Error","Bit Range is unavailable")
ProcedureReturn
EndIf
If bitRange2>255 Or bitRange3<0
MessageRequester("Error","Bit Range is unavailable")
ProcedureReturn
EndIf
If bitRange1>255 Or bitRange3<0
MessageRequester("Error","Bit Range is unavailable")
ProcedureReturn
EndIf
If bitRange0>255 Or bitRange3<0
MessageRequester("Error","Bit Range is unavailable")
ProcedureReturn
EndIf
; Set bits Range 3
N=7
Values=bitRange3
While Values>0
tmp=Pow(2,N)
If(Values-tmp>=0)
Values-tmp
ValReturn=ValReturn|tmp<<24
EndIf
N-1
Wend
; Set bits Range 2
N=7
Values=bitRange2
While Values>0
tmp=Pow(2,N)
If(Values-tmp>=0)
Values-tmp
ValReturn=ValReturn|tmp<<16
EndIf
N-1
Wend
; Set bits Range 1
N=7
Values=bitRange1
While Values>0
tmp=Pow(2,N)
If(Values-tmp>=0)
Values-tmp
ValReturn=ValReturn|tmp<<8
EndIf
N-1
Wend
; Set bits Range 0
N=7
Values=bitRange0
While Values>0
tmp=Pow(2,N)
If(Values-tmp>=0)
Values-tmp
ValReturn=ValReturn|tmp
EndIf
N-1
Wend
ProcedureReturn ValReturn
EndProcedure
Procedure GetBitRangeValues(Values.l,Range)
Protected ValReturn.l
If(Range<0 Or Range>3)
EndIf
Select Range
Case 0
ValReturn=Values&$000000FF
Case 1
ValReturn=Values&$0000FF00
ValReturn=ValReturn>>8
Case 2
ValReturn=Values&$00FF0000
ValReturn=ValReturn>>16
Case 3
ValReturn=Values&$FF000000
ValReturn=ValReturn>>24
ValReturn=ValReturn&$000000FF
Default
MessageRequester("Error","The Range is unavailable")
EndSelect
ProcedureReturn ValReturn
EndProcedure
v=SetBit(247,164,43,31)
Debug RSet(Bin(V,#PB_Long),32,"0")
Debug "Values of Range 0 : "+Str(GetBitRangeValues(V,0))
Debug "Values of Range 1 : "+Str(GetBitRangeValues(V,1))
Debug "Values of Range 2 : "+Str(GetBitRangeValues(V,2))
Debug "Values of Range 3 : "+Str(GetBitRangeValues(V,3))