문자열과 숫자가 혼합 된 바이트 스트림을 어떻게 설정할 수 있습니까?

RadioMan85

내 목표는 문자열 요소, 정수, 기타 바이트 배열 등으로 채울 수있는 바이트 배열을 설정하는 것입니다. 결국이 바이트 배열을 직렬 인터페이스로 보내고 싶습니다.

예를 들어 :

preamble = "ABC"
payloadSize = 10 #supposed to represent a uint32_t value
payload = bytearray(payloadSize)
crc = bytearray(4);
postamble = "CBA"

이것은 이제 단일 바이트 배열에 연결되어 다음으로 공급 될 수 있습니다.

import serial
ser = serial.Serial(...)

txBuffer= bytearray(...)

#... adding here "somehow" the preamble, payloadsize, payload, crc and postamble to the txBuffer.

ser.write(txBuffer)

패킷의 모양

b'A B C 0 0 0 10 pp pp pp pp pp pp pp pp pp pp  cc cc cc cc C B A'

pp는 페이로드 바이트로 유지되고 cc는 crc 바이트로 유지됩니다.

주석 처리 후 "a"해결책을 찾았고 시도 및 오류 ... (댓글의 경우 thx) :


index = 3
txBuffer[:index] = bytes(preamble, 'ascii')
txBuffer[index] = payloadSize >> 24 & 0xFF
index += 1
txBuffer[index] = payloadSize >> 16 & 0xFF
index += 1
txBuffer[index] = payloadSize >> 8  & 0xFF
index += 1
txBuffer[index] = payloadSize       & 0xFF

for i in range(index, payloadSize):
    txBuffer[i] = payload[i]

index += payloadSize

txBuffer[index] = crc[0]
index += 1
txBuffer[index] = crc[1]
index += 1
txBuffer[index] = crc[2]
index += 1
txBuffer[index] = crc[3]

txBuffer[index:] = postamble

음,이게 효과가있을 것입니다. 더 나은 방법에 대한 권장 사항이 있습니까?

일 카츄

이제 단일 바이트 배열에 연결되어야합니다.

글쎄, 당신은 bytearrays 또는 bytearrays를 b'...'문자열 과 연결할 수 있습니다 .

>>> bytearray(b'abc') + b'def'
bytearray(b'abcdef')

int 인코딩에 관해서는 struct라이브러리 가 원하는 것일 수 있습니다. 예를 들어 little-endian unsigned long 패킹 ( 해당 페이지의 Format Strings 부분 참조) :

>>> struct.pack("<L", 0x11121314);
b'\x14\x13\x12\x11'

그래서 대체로 이런 일이 가능할까요?

preamble = b'ABCD'
payload = b'hello!\0'
payloadsize = len(payload)
txbuf = bytearray(preamble + struct.pack("!L", payloadsize) + payload)

이제 txbuf해야한다 bytearray(b'ABCD\x00\x00\x00\x07hello!\x00').

또는 미리 할당하고 제자리에 채우려면 그게 중요한지 전혀 알지 못합니다.

txbuf = bytearray(20)
txbuf[0:4] = preamble
txbuf[4:8] = struct.pack("!L", payloadsize)
txbuf[8: 8 + payloadsize] = payload

그대로 두어야합니다 bytearray(b'ABCD\x00\x00\x00\x07hello!\x00\x00\x00\x00\x00\x00').

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

스트림 (문자열)을 어떻게 평가할 수 있습니까?

분류에서Dev

혼합 자바 스크립트 2D 배열에서 숫자가 가장 큰 요소를 어떻게 선택할 수 있습니까?

분류에서Dev

정규식을 문자열과 어떻게 결합 할 수 있습니까?

분류에서Dev

혼합 된 텍스트와 숫자 (예 : 호스트 이름)를 어떻게 정렬합니까?

분류에서Dev

인쇄 할 어레이 / 매트릭스의 특정 숫자 집합을 어떻게 설정할 수 있습니까?

분류에서Dev

문자열과 정수 사이의 비교는 자바 스크립트에서 어떻게 작동합니까?

분류에서Dev

정규식에 결합 된 숫자 또는 문자열을 어떻게 일치시킬 수 있습니까?

분류에서Dev

Scala 숫자가 포함 된 문자열이있는 맵을 어떻게 정렬합니까?

분류에서Dev

자바 스크립트에서 데이터 행 값을 어떻게 설정할 수 있습니까?

분류에서Dev

MessageBox의 텍스트 (제목, 캡션)를 정의 된 문자열로 어떻게 바꿀 수 있습니까?

분류에서Dev

바이트 문자열을 바이트 객체로 어떻게 변환 할 수 있습니까?

분류에서Dev

설치된 앱 버전과 문자열 응답 값을 어떻게 비교할 수 있습니까?

분류에서Dev

여러 배열이있는 배열을 어떻게 정렬 할 수 있습니까? (자바 스크립트)

분류에서Dev

알 수없는 소스 (바이트, 문자열 ...)의 정보를 어떻게 읽을 수 있습니까?

분류에서Dev

줄 바꿈으로 구분 된 ASCII 숫자 스트림을 이진수로 (그리고 다시) 어떻게 변환합니까?

분류에서Dev

정수를 문자 배열에 저장된 16 진수 바이트로 어떻게 변환 할 수 있습니까?

분류에서Dev

기호가 포함 된 숫자 데이터 유형을 어떻게 디코딩 할 수 있습니까?

분류에서Dev

데이터 세그먼트에로드 된 긴 문자열에 어떻게 액세스 할 수 있습니까?

분류에서Dev

이 알림을 어떻게 수정합니까? 초기화되지 않은 문자열 오프셋 : 0과 스트립 슬래시?

분류에서Dev

이 두 가지 간단한 자바 스크립트 코드를 어떻게 통합 할 수 있습니까?

분류에서Dev

base64로 인코딩 된 shaX 바이너리 문자열을 어떻게 해독 할 수 있습니까?

분류에서Dev

자바 스크립트 객체를 어떻게 결합 할 수 있습니까?

분류에서Dev

자바 스크립트에서 양식의 입력 값을 어떻게 설정할 수 있습니까?

분류에서Dev

Google Chart google.visualization.arrayToDataTable : 형식이 지정된 문자열을 어떻게 전달할 수 있습니까?

분류에서Dev

개체 키 및 값을 형식이 지정된 문자열로 어떻게 변환 할 수 있습니까?

분류에서Dev

정규식을 사용하여 동적 탭과 줄 바꿈으로 구분 된 문자열의 유효성을 어떻게 확인할 수 있습니까?

분류에서Dev

목록 (문자열) 목록을 어떻게 순열합니까? 세트로 할 수 있습니까?

분류에서Dev

어떻게 정보를 손실하지 않고 문자열 바이트를 저장할 수 있습니까?

분류에서Dev

숫자가 특정 범위에 있는지 어떻게 테스트 할 수 있습니까?

Related 관련 기사

  1. 1

    스트림 (문자열)을 어떻게 평가할 수 있습니까?

  2. 2

    혼합 자바 스크립트 2D 배열에서 숫자가 가장 큰 요소를 어떻게 선택할 수 있습니까?

  3. 3

    정규식을 문자열과 어떻게 결합 할 수 있습니까?

  4. 4

    혼합 된 텍스트와 숫자 (예 : 호스트 이름)를 어떻게 정렬합니까?

  5. 5

    인쇄 할 어레이 / 매트릭스의 특정 숫자 집합을 어떻게 설정할 수 있습니까?

  6. 6

    문자열과 정수 사이의 비교는 자바 스크립트에서 어떻게 작동합니까?

  7. 7

    정규식에 결합 된 숫자 또는 문자열을 어떻게 일치시킬 수 있습니까?

  8. 8

    Scala 숫자가 포함 된 문자열이있는 맵을 어떻게 정렬합니까?

  9. 9

    자바 스크립트에서 데이터 행 값을 어떻게 설정할 수 있습니까?

  10. 10

    MessageBox의 텍스트 (제목, 캡션)를 정의 된 문자열로 어떻게 바꿀 수 있습니까?

  11. 11

    바이트 문자열을 바이트 객체로 어떻게 변환 할 수 있습니까?

  12. 12

    설치된 앱 버전과 문자열 응답 값을 어떻게 비교할 수 있습니까?

  13. 13

    여러 배열이있는 배열을 어떻게 정렬 할 수 있습니까? (자바 스크립트)

  14. 14

    알 수없는 소스 (바이트, 문자열 ...)의 정보를 어떻게 읽을 수 있습니까?

  15. 15

    줄 바꿈으로 구분 된 ASCII 숫자 스트림을 이진수로 (그리고 다시) 어떻게 변환합니까?

  16. 16

    정수를 문자 배열에 저장된 16 진수 바이트로 어떻게 변환 할 수 있습니까?

  17. 17

    기호가 포함 된 숫자 데이터 유형을 어떻게 디코딩 할 수 있습니까?

  18. 18

    데이터 세그먼트에로드 된 긴 문자열에 어떻게 액세스 할 수 있습니까?

  19. 19

    이 알림을 어떻게 수정합니까? 초기화되지 않은 문자열 오프셋 : 0과 스트립 슬래시?

  20. 20

    이 두 가지 간단한 자바 스크립트 코드를 어떻게 통합 할 수 있습니까?

  21. 21

    base64로 인코딩 된 shaX 바이너리 문자열을 어떻게 해독 할 수 있습니까?

  22. 22

    자바 스크립트 객체를 어떻게 결합 할 수 있습니까?

  23. 23

    자바 스크립트에서 양식의 입력 값을 어떻게 설정할 수 있습니까?

  24. 24

    Google Chart google.visualization.arrayToDataTable : 형식이 지정된 문자열을 어떻게 전달할 수 있습니까?

  25. 25

    개체 키 및 값을 형식이 지정된 문자열로 어떻게 변환 할 수 있습니까?

  26. 26

    정규식을 사용하여 동적 탭과 줄 바꿈으로 구분 된 문자열의 유효성을 어떻게 확인할 수 있습니까?

  27. 27

    목록 (문자열) 목록을 어떻게 순열합니까? 세트로 할 수 있습니까?

  28. 28

    어떻게 정보를 손실하지 않고 문자열 바이트를 저장할 수 있습니까?

  29. 29

    숫자가 특정 범위에 있는지 어떻게 테스트 할 수 있습니까?

뜨겁다태그

보관