Python 3 Building an array of bytes

后端 未结 6 691
终归单人心
终归单人心 2020-12-29 01:44

I need to build a tcp frame with raw binary data, but all examples and tutorials I\'ve found talking about bytes always involve conversion from a string, and that\'s not wha

相关标签:
6条回答
  • 2020-12-29 02:11
    frame = b'\xa2\x01\x02\x03\x04'
    

    wasn't mentionned till now...

    0 讨论(0)
  • 2020-12-29 02:14

    I think Scapy is what are you looking for.

    http://www.secdev.org/projects/scapy/

    you can build and send frames (packets) with it

    0 讨论(0)
  • 2020-12-29 02:16

    what about simply constructing your frame from a standard list ?

    frame = bytes([0xA2,0x01,0x02,0x03,0x04])
    

    the bytes() constructor can build a byte frame from an iterable containing int values. an iterable is anything which implements the iterator protocol: an list, an iterator, an iterable object like what is returned by range()...

    0 讨论(0)
  • 2020-12-29 02:16

    Here is a solution to getting an array (list) of bytes:

    I found that you needed to convert the Int to a byte first, before passing it to the bytes():

    bytes(int('0xA2', 16).to_bytes(1, "big"))
    

    Then create a list from the bytes:

    list(frame)
    

    So your code should look like:

    frame = b""
    frame += bytes(int('0xA2', 16).to_bytes(1, "big"))
    frame += bytes(int('0x01', 16).to_bytes(1, "big"))
    frame += bytes(int('0x02', 16).to_bytes(1, "big"))
    frame += bytes(int('0x03', 16).to_bytes(1, "big"))
    frame += bytes(int('0x04', 16).to_bytes(1, "big"))
    bytesList = list(frame)
    

    The question was for an array (list) of bytes. You accepted an answer that doesn't tell how to get a list so I'm not sure if this is actually what you needed.

    0 讨论(0)
  • 2020-12-29 02:19

    Use a bytearray:

    >>> frame = bytearray()
    >>> frame.append(0xA2)
    >>> frame.append(0x01)
    >>> frame.append(0x02)
    >>> frame.append(0x03)
    >>> frame.append(0x04)
    >>> frame
    bytearray(b'\xa2\x01\x02\x03\x04')
    

    or, using your code but fixing the errors:

    frame = b""
    frame += b'\xA2' 
    frame += b'\x01' 
    frame += b'\x02' 
    frame += b'\x03'
    frame += b'\x04'
    
    0 讨论(0)
  • 2020-12-29 02:23

    agf's bytearray solution is workable, but if you find yourself needing to build up more complicated packets using datatypes other than bytes, you can try struct.pack(). http://docs.python.org/release/3.1.3/library/struct.html

    0 讨论(0)
提交回复
热议问题