[Tutor] stumped again adding bytes
rabidpoobear at gmail.com
Wed Feb 21 21:37:36 CET 2007
shawn bright wrote:
> oh, sorry, i meant how to get the 0x0A27 out of two bytes
> a = 0x27 and b = 0x8A
I don't see what the number 0x0A27 has to do with bytes 0x27 and 0x8A,
but I'll assume you meant
0x0A for b.
> actually, in my script, i am not using the hex values at all, i have
> these because they are examples in the documentation of a machine i am
> talking to. i am actually using ord(a) and ord(b) to get digital
> values of the numbers
> so, i guess a better question is how to get 2599 from the ord(a) and
> ord(b), how do i put the two bytes together to make one number?
Well, if you have the bytes originally, instead of ording them, hex them.
so... given these bytes
bytelist = [chr(0x27),chr(0x8A)]
hexlist = 
for item in bytelist:
print int('0x' + ''.join(hexlist) , 16)
A less roundabout way to do this:
given the number
this is stored in the system the same as the number 10.
As you can see.
So having the ord values is okay, because they're the same values as the
hex of the bytes, just represented in a different base.
Okay, now we'll assume that a byte is 8 bits.
Because of this, we know that the number
is the same as
(0xFF << 8) + 0xEE
In other words, the higher byte is shifted over by 8 bits, and the other
value is not shifted.
This idea could easily be expanded to encompass byte strings of any length.
Oh, and in the case of your example values,
>>> (0x0A << 8) + 0x27
Note that the + operator has higher (or the same?) precedence than the
binary shift left.
This means that the value 0x0A will be shifted by 8+0x27 times if the
parenthesis are missing.
Other equivalent operations:
>>> 0x0A * 256 + 0x27
>>> 0x0A * 2**8 + 0x27
But like Kent said, you probably should use struct or something like that.
Just in case you're interested, I'm sending this e-mail as well.
More information about the Tutor