[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

getting bit on bytes

shawn bright

7/6/2007 5:37:00 PM

hey there all, i have a question concerning making numbers from bytes
and back agian

if i have some numbers:
lo byte = 192
hi byte = 176
i can get the number 12480 like this:
(176 & 127) * 256 + 192 = 12480


but if i start with the 12480, how do i get the two bytes (lo and hi)
that make it up?

i kinda know what i am doing here, but keep getting tripped up

thanks

2 Answers

Gregory Seidman

7/6/2007 5:44:00 PM

0

On Sat, Jul 07, 2007 at 02:37:09AM +0900, shawn bright wrote:
> hey there all, i have a question concerning making numbers from bytes
> and back agian
>
> if i have some numbers:
> lo byte = 192
> hi byte = 176
> i can get the number 12480 like this:
> (176 & 127) * 256 + 192 = 12480

It's usually written (176 << 8) + 192, and I don't know why you want to
zero out the high bit if you claim that the high byte is the high byte.

> but if i start with the 12480, how do i get the two bytes (lo and hi)
> that make it up?

hi = 255 & (12480 >> 8)
lo = 255 & 12480

> i kinda know what i am doing here, but keep getting tripped up
> thanks
--Greg


shawn bright

7/6/2007 6:20:00 PM

0

well, it's very strange to me too.

you see, we are reading info from sensors through a serial port, as
the message comes in, i collect all the bytes into an array msg_list
the id number of the sensor, i get like this.
sensor = (msg_list[1] & 127) * 256 + msg_list[0]

so, now my challenge is to write commands back to the sensor so i need
to take the sensor number that we have in the database and create the
bytes out of it to write to the port.

i don't know exactly why the first byte is masked in the msb. I just
did it because their docs told me to.

thanks


On 7/6/07, Gregory Seidman <gsslist+ruby@anthropohedron.net> wrote:
> On Sat, Jul 07, 2007 at 02:37:09AM +0900, shawn bright wrote:
> > hey there all, i have a question concerning making numbers from bytes
> > and back agian
> >
> > if i have some numbers:
> > lo byte = 192
> > hi byte = 176
> > i can get the number 12480 like this:
> > (176 & 127) * 256 + 192 = 12480
>
> It's usually written (176 << 8) + 192, and I don't know why you want to
> zero out the high bit if you claim that the high byte is the high byte.
>
> > but if i start with the 12480, how do i get the two bytes (lo and hi)
> > that make it up?
>
> hi = 255 & (12480 >> 8)
> lo = 255 & 12480
>
> > i kinda know what i am doing here, but keep getting tripped up
> > thanks
> --Greg
>
>
>