Toon posts:

[Java] Twee binaire waarden aan elkaar plakken

Pagina: 1
Acties:
  • 111 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Via de com-poort krijg ik steeds twee bytes binnen, die samen één waarde bevatten. Een voorbeeld:

Het getal 861 wordt via een uP weggestuurd, verdeeld over trwee bytes. Dit komt neer op een byte met de waarde 00000011 (=3) en een tweede byte met 01011101 (=93)..

Nu krijg ik deze in mijn java applicatie binnen als twee integers.. Hoe krijg ik het nu voor elkaar dat ik deze twee waarden weer samenvoeg tot één integer??

Wat ik nu heb:
Java:
1
2
3
4
5
6
7
8
int temp1 = 3;
int temp2 = 93;

String s1 = Integer.toBinaryString(temp1);
String s2 = Integer.toBinaryString(temp2);

String s3 = s1 + s2;
int temp3 = Integer.parseInt(s3, 2);


Maar het probleem hiermee is dat de tweede string de "0" aan het begin weggooit, waardoor s3 "111011101" wordt ipv "" 1101011101"..

Hoe kan ik ervoor zorgen dat die strings altijd ter grootte van 8bits blijven??

PS: de eerste gestuurde byte is bevat dus de MSB van het hele getal..

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 04-05 14:55

Janoz

Moderator Devschuur®

!litemod

Waarom moet er persee eerst een binaire string van gemaakt worden? Je kunt toch gewoon temp1 *256 + temp2 doen?

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Verwijderd

Topicstarter
dat werkt idd ook :)

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

Of, omdat je toch bitwise bezig bent, kun je ook meteen 8 bits naar links shiften. :+

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

Misschien zou je deze methode iets aan kunnen passen:

Java:
1
2
3
4
5
6
7
8
    private String fixLength(int source, int length) {
        String returnString = "";
        returnString += source;
        while (returnString.length() < length) {
            returnString = "0" + returnString;
        }
        return returnString;
    }

  • Salandur
  • Registratie: Mei 2003
  • Laatst online: 08:54

Salandur

Software Engineer

code:
1
int totaalgetal = (temp1 << 8) + temp2;

Hiermee wordt het eerste getal 8 bits naar links geschoven, daarna vul je die geschoven bits op met temp2

[ Voor 4% gewijzigd door Salandur op 29-04-2005 16:23 ]

Assumptions are the mother of all fuck ups | iRacing Profiel


  • Robtimus
  • Registratie: November 2002
  • Laatst online: 07-05 19:18

Robtimus

me Robtimus no like you

Salandur schreef op vrijdag 29 april 2005 @ 16:22:
code:
1
int totaalgetal = (temp1 << 8) + temp2;

Hiermee wordt het eerste getal 8 bits naar links geschoven, daarna vul je die geschoven bits op met temp2
Waarom dan niet meteen
Java:
1
(temp1 << 8) | temp2
Doet hetzelfde, maar als je toch met bitwise operators bezig bent doe het dan meteen goed ;)

[ Voor 14% gewijzigd door Robtimus op 30-04-2005 13:13 ]

More than meets the eye
There is no I in TEAM... but there is ME
system specs


  • Salandur
  • Registratie: Mei 2003
  • Laatst online: 08:54

Salandur

Software Engineer

IceManX schreef op zaterdag 30 april 2005 @ 13:12:
[...]
Waarom dan niet meteen
Java:
1
(temp1 << 8) | temp2
Doet hetzelfde, maar als je toch met bitwise operators bezig bent doe het dan meteen goed ;)
dat is idd precies hetzelfde, alleen ben ik niet zo'n bitwise kunstenaar :)

Assumptions are the mother of all fuck ups | iRacing Profiel

Pagina: 1