2016-07-27 3 views
0

시리얼을 통해 다른 장치와 통신하는 장치를 생성해야합니다. 아주 기본적인 것들.파이썬, 이진 데이터를 공식화 할 올바른 방법 시리얼을 통해 전송할 준비가되었습니다.

그러나 특정 바이너리 데이터를 전달하면 나머지는 처리됩니다.

데이터는 바이너리 형식이어야하며 인터넷을 통해 다양한 방법으로 보았지만 바이너리 데이터와 문자열이 아닌 올바른 표현 방법은 무엇인지 잘 모릅니다. 여기

내가 뭘 찾았는지의 몇 가지 예입니다 :

나는 나를 각 바이트의 특정 비트를 설정하고 내가 가야하는 방법을 오히려 혼란 스러워요 포함 할 것이다 정보의 몇 바이트를 공식화 할 필요가
b'01001011' # Is this a packed string though? 
bytes(4) # This creates bytes. How do I manipulate the bits?, is this data able to send over serial? 
int('01001011', 2) # Will this be treated as an integer over serial? 
binascii.hexify() # This produces ASCII representation 

이 같은 파이썬 모양에

답변

1

진 리터럴 :

>>> 0b11 
3 
>>> 0b10 
2 
>>> 0b100 
4 
당신이 비트는 비트 연산자 사용하여 조작 할 수 있습니다

:

>>> 0b1000 
8 
>>> 0b1000 | 0b1 
9 

|은 단지 or 연산자입니다. 여기에 다른 연산자를 참조하십시오

>>> "{0:b}".format(9) 
'1001' 
>>> "{0:b}".format(65) 
'1000001' 
>>> "{0:b}".format(234) 
'11101010' 

편집 특정 비트 설정 Exemple : BitwiseOperators

당신이 및 String.format 사용할 수있는 숫자 이진 표현 보려면

# setting off second bit 
>>> bin(0b1100 & 0b1011) 
'0b1000' 
# setting on third bit 
>>> bin(0b1100 | 0b0010) 
0b1110' 

주를이 바이너리 리터럴을 사용하면 int :

>>> type(0b1) 
<type 'int'> 
+0

좋은 물건! 한 가지 질문으로, 데이터의 한 바이트를 '0b00000000'이라고 말하고 특정 비트를 조작 할 수 있습니까? 어쩌면 인덱스로? 또한, 이것은 어떤 데이터 유형입니까, 그냥 int입니까? 또는 bitarray? – Harvey

+0

숫자 a (int)입니다. 비트를 조작하려면 비트 연산을 파헤쳐 야합니다. 내 대답에는 "약간의 영향"에 대한 예를 하나 넣을 것입니다. – Lynch