2013-12-09 1 views
0

나는 블루투스를 사용하여 16 바이트 바이트 배열을 파이썬 서버에 보낸다. 기본적으로 달성하고자하는 것은 그대로 바이트 배열을 읽습니다. 어떻게하면 파이썬에서 그렇게 할 수 있을까요?파이썬의 소켓에서 바이트 배열을 읽는 방법

내가 지금하고있는 일은 그것이 소켓에서 데이터를 읽을 수있는 유일한 방법이기 때문에 문자열을 읽는 것입니다. 이것은 파이썬 소켓의 코드입니다.

data = client_sock.recv(1024) 

여기서 data은 문자열입니다. 어떤 아이디어?

답변

3

당신은 이미 당신이 요구 한대로 정확하게하고 있습니다.

data은있는 그대로 소켓에서 수신 한 바이트입니다.

파이썬 3.x에서는 bytes 개체이며 bytearray의 불변 버전입니다. Python 2.x에서 strbytes이 같은 유형이므로 str 개체입니다. 그러나 어느 쪽이나, 그 타입은 단지 바이트 문자열입니다.

문자가 아닌 숫자로 해당 바이트에 액세스하려는 경우 : Python 3.x에서는 bytes을 인덱싱하거나 반복 할 뿐이지 만 Python 2.x에서는 각 문자에 ord을 호출해야합니다. 쉽습니다.

또는 두 버전 모두 data = bytearray(data)을 호출하면 변경할 수있는 bytearray 데이터 복사본을 만들 수 있습니다.이 복사본은 데이터를 색인화하거나 반복 할 때 문자가 아닌 숫자를 제공합니다.

따라서, 예를 들어, 우리는 텍스트 파일에 별도의 줄에 각 바이트의 진수 값을 기록하고 싶은 말은하자 (할 수있는 어리석은 일이 있지만 아이디어를 보여줍니다) 파이썬 2.7 :

data = client_sock.recv(1024) 
with open('textfile.txt', 'a') as f: 
    for ch in data: 
     f.write('{}\n'.format(ord(ch))) 
+0

감사합니다. 'ord' 함수를 사용하여 하나 대신 4 바이트를 취하고 그 4 바이트를 float으로 표현할 수 있습니까? – user2426316

+0

@ user2426316 : 아니요, 'ord' 함수는 각 값을 0-255의 정수로 가져올 수 있습니다. 당신이하고 싶지 않은 수동으로 4 개의 정수 중에서 부동 소수점을 만드는 법을 알아 내야 할 것입니다. 아마도 [struct.unpack'] (http://docs.python.org/2/library/struct.html#struct.unpack)을 찾고있을 것입니다. – abarnert

0

원하는 것은 struct 모듈입니다. 구체적으로 struct.unpack()

+0

그는 그의 의견에서 궁극적으로 원하는 것처럼 들리지만, 그대로 바이트를 읽을 수있는 방법은 아닙니다. – abarnert

+0

사실, 나는 당신의 대답을 확장하는 것을 의미했습니다. 내가 추가 할 수있는 유일한 점은 멀티 바이트 값 변환에 따른 잠재적 인 엔디안 문제이지만 네트워크를 통해 바이너리 데이터를 작성하는 경우 이미 해당 문제를 알고 있어야합니다. –

관련 문제