Muraer wrote:
> 1000 * rxbuffer(0) + 100 * rxbuffer(1) + 10 * rxbuffer(2) + rxbuffer(3)
Nicht ganz. Er muss natürlich jeden String noch in Hex umrechnen. Da
weiß ich aber nicht, wie das in C geht.
Ist ziemlich verschwenderisch codiert, Du koenntest einen 16-Bit-Integer
auch in 2 Bytes uebertragen, zumal Du dann sogar noch weiter als bis
9999 kommst ;)
> > 1000 * rxbuffer(0) + 100 * rxbuffer(1) + 10 * rxbuffer(2) + rxbuffer(3)> Nicht ganz. Er muss natürlich jeden String noch in Hex umrechnen. Da> weiß ich aber nicht, wie das in C geht.
1000 * (rxbuffer(0)-'0' +
100 * (rxbuffer(1)-'0' +
10 * (rxbuffer(2)-'0' +
(rxbuffer(3)-'0'
so könnte es gehen - ist aber wirklich verschwendung, wenn man wie
üblich ab 1900 rechnet reicht auch ein Byte bis 2156 aus.
"so könnte es gehen - ist aber wirklich verschwendung, wenn man wie
üblich ab 1900 rechnet reicht auch ein Byte bis 2156 aus."
naja - ein Byte gesparten RAM, dafür jedesmal ne Menge Flash, wenn ich
mit dem Datum rechnen will/muss? Ich nehm int dafür.
nein
ein rxbuffer(0)-'0' wandelt die Zeiche "0".."9" in eine Zahl 0..9 um
Somit reicht das von 0..9999
(genaugenommen von -53328..229977 :)
Gruß
Roland
@Bernd:
crazyhorse hatte wohl gedacht, du willst Jahreszahlen übergeben. Hier
wird üblicherweise wohl mit dem Jahr 1900 angefangen. Will man nun die
Jahreszahl mit 1 Byte übertragen, Wäre 1900 + 255 = 2155 die höchste
übertragbare Jahreszahl.
Hat also mit deiner Anwendung eigentlich nichts zu tun ;)
Bernd wrote:
> Kann mir das jemand erklären? Müßte ja eigenlich 2333> rauskommen....
Das kommt auf deine Eingabe an. Der Code basiert auf der Annahme, dass
dein String die Zahlen in ASCII (also 0x30 - 0x39) beinhaltet, du
verwendest hier jedoch direkt die Bytewerte 0-9 (0x00 - 0x09). Dafür
kannst du die Subtraktion von '0' (0x30) weglassen, dann sollte es
gehen.
Natürlich kann man mit der Zahl rechnen, aber Integer hat halt nur 16
Bit (-32768..32767)
Sieht man hier schön:
14541 = 0x38CD
0x38CD * 0x38CD = 0x0C9A5429
21545 = 0x5429
Gruß
Roland
Nach diversen syntaktisch falschen Beispielen und Ausflügen in Java
würde ich mal vorschlagen, einen Blick ins C-Handbuch zu werfen, so in
der Ecke, wo 'strtoul' steht...