how to get the integer value of a single pyserial byte in python -
i'm using pyserial in python 2.7.5 according docs:
read(size=1) parameters: size – number of bytes read. returns:
bytes read port. read size bytes serial port. if timeout set may return less characters requested. no timeout block until requested number of bytes read.changed in version 2.5: returns instance of bytes when available (python 2.6 , newer) , str otherwise.
mostly want use values hex values , when use them use following code:
ch = ser.read() print ch.encode('hex') this works no problem.
but i'm trying read 1 value integer, because it's read in string serial.read, i'm encountering error after error try integer value.
for example:
print ch prints nothing because it's invisible character (in case chr(0x02)).
print int(ch) raises error
valueerror: invalid literal int() base 10: '\x02' trying print int(ch,16), ch.decode(), ch.encode('dec'), ord(ch), unichr(ch) give errors (or nothing).
in fact, way have got work converting hex, , integer:
print int(ch.encode('hex'),16) this returns expected 2, know doing wrong way. how convert a chr(0x02) value 2 more simply?
believe me, have searched , finding ways in python 3, , work-arounds using imported modules. there native way without resorting importing 1 value?
edit: have tried ord(ch) returning 90 , know value 2, 1) because that's i'm expecting, , 2) because when error, tells me (as above)
here code using generates 90
count = ser.read(1) print "count:",ord(ch) the output count: 90
and cut , pasted code above saw error count != ch!!!!
thanks
use ord function. have in input chr(2) (which, constant, can expressed '\x02').
i= ord( chr(2) ) i= ord( '\x02' ) would both store integer 2 in variable i.
Comments
Post a Comment