Senden von Zahlen und Bits auf eine spaarsame methode! von ???
Also, vieleciht hab ihr schon mein altes Topic gesehen "Bit<->Byte"
Hier ist eine art erweiterte version. Und zwar sind diese Funktionen dazu da, um z.b. eine zahl nicht als string zu versenden, sondern eben als reihe von bits. Dies spart viele bytes beim versenden, da man normalerweiße fuer eine ziffer ein Byte braucht(sprich 8 bits). Hiermit kann man die volle bandbreite eines bytes ausnutzen (sprich pro byte 256 verschiedene Zahlen). Das wurde bedeuten, dass man mit der alten methode etwa 25,6 mal so viele bytes benötigt, um eine Zahl zu versenden als mit dieser.
So jetzt erstmal der Code und dann ein paar erlauterungen zu den funx:
[code:1:f79508d385]Function bit_byte$(bits$)
bits$ = "1" + bits$
While Len(bits$) Mod 8 > 0
bits$ = "0"+bits$
Wend
outp$ = ""
While Len(bits$) > 0
sav% = 0
For pos% = 1 To 8
sav% = sav%+Int(Mid(bits$,pos%,1))*2^(8-pos%)
Next
bits$ = Right(bits$,Len(bits$)-8)
outp$ = outp$ + Chr(sav%)
Wend
Return outp$
End Function

Function byte_bit$(bytes$)
outp$ = ""
While Len(bytes$) > 0
bit% = Asc(Left$(bytes$,1))
sav$ = ""
For pos% = 7 To 0 Step -1
If bit%-2^pos% >= 0 Then sav$ = sav$ +"1" : bit% = bit% - 2^pos% Else sav$ = sav$ +"0"
Next
bytes$ = Right$(bytes$,Len(bytes$)-1)
outp$ = outp$ + sav$
Wend
outp$ = Right(outp$,Len(outp$)-Instr(outp$,"1"))
Return outp$
End Function

Function bit_zahl(bits$);maximal 9 stellen!
For pos% = 1 To Len(bits$)
sav% = sav%+Int(Mid(bits$,pos%,1))*2^(Len(bits)-pos%)
Next
Return sav%
End Function

Function zahl_bit$(zahl%);maximal 9 stellen!
For pos% = Len(zahl%)*4 To 0 Step -1
If zahl%-2^pos% >= 0 Then sav$ = sav$ +"1" : zahl% = zahl% - 2^pos% ElseIf sav$ Then sav$ = sav$ +"0"
Next
Return sav$
End Function

Function bit_zahl_neg(bits$);maximal 9 stellen!
If Left(bits$,1) Then Return bit_zahl(Right(bits$,Len(bits$)-1)) Else Return -1*bit_zahl(Right(bits$,(Len(bits$)-1)))
End Function

Function zahl_bit_neg$(zahl$);maximal 9 stellen!
If zahl$ < 0 Then Return "0"+zahl_bit(Right(zahl$,Len(zahl$)-1)) Else Return "1"+zahl_bit(zahl$)
End Function[/code:1:f79508d385]

bit_byte$(bits$) ist eine funktion um MEHRERE binärdaten wie z.b. an oder aus oder forward+ oder forward- in EINIGE bytes umzuformen

byte_bit$(bytes$) bewrikt das gegenteil. Also entschluesselt die gepackten bits aus dem Byte wieder zu regulären bits

bit_zahl entschluesselt einen zahl, welche vorher in bits gepackt wurde.(beachte !KEINE NEGATIVEN ZAHLEN!) Siehe dazu zahl_bit.

zahl_bit packt eine zahl in mehrere bits, welche man nachher in bytes umwandeln kann.(beachte !KEINE NEGATIVEN ZAHLEN!)

Bit_zahl_neg und zahl_bit_neg bewirkt imprinzip das gleiche wie die funx ohne _neg, nur das hiermit auch negative zahlen beruecksichtigt werden(das verbraucht 1bit).


Ok. Soweit so gut, aber wie verwende ich jetzt diese funx?:

[code:1:f79508d385]b$ = "110101111000110011"
Print b$
a% = bit_zahl_neg(b$)
Print a%
Print zahl_bit_neg(a%)
WaitKey
End
[/code:1:f79508d385]
Dies ist ein beispiel um z.b. eine vom server empfange reighe von bits(negative zahlen beruecksichtigt) in eine zahl zu verwandeln. Und um zu zeigen, das es auch wieder rueckwaerts funzt, eben auch wieder zurueck in eine reihe von bits.
===
von ???
Hi,

finde ich überflüssig ,
warum sollte man eine Zahl wieder in einen String wandeln ?
Oder warum sollte man Zahlen in einem String speichern .
Wenn man schon optimiert dann kann man sich Flags
in einem Integer merken , diese dann im Netz übertragen und empfangen .

Abfragen z.B. so :
If (Flags And 1) = 1 Then
If (Flags And 2) = 2 Then
===
von ???
zahlen werden sowieso binär gesendet also komm ich nicht ganz hinter den sinn deiner funktionen... wenn du bcd gepackte zahlen senden würdest ok, aber sonst



Suche:
(unterstützt mySQL Wildcards ala %)
Titel:
Text:
Autor: