Hướng dẫn bytes to decimal python - byte sang python thập phân

Tôi muốn chuyển đổi một đối tượng loại byte thành biểu diễn nhị phân trong Python 3.x.

Ví dụ, tôi muốn chuyển đổi đối tượng byte

error struct.error: unpack requires a bytes object of length 2
6 thành biểu diễn nhị phân
error struct.error: unpack requires a bytes object of length 2
7 trong nhị phân (hoặc 17 trong thập phân).

Tôi đã thử điều này:

print(struct.unpack("h","\x11"))

Nhưng tôi đang nhận được:

error struct.error: unpack requires a bytes object of length 2

Hướng dẫn bytes to decimal python - byte sang python thập phân

kiyah

1.4861 Huy hiệu vàng19 Huy hiệu bạc27 Huy hiệu đồng1 gold badge19 silver badges27 bronze badges

hỏi ngày 10 tháng 7 năm 2017 lúc 11:19Jul 10, 2017 at 11:19

Bắt đầu từ Python 3.2, bạn có thể sử dụng

error struct.error: unpack requires a bytes object of length 2
8.

Đối số thứ hai,

error struct.error: unpack requires a bytes object of length 2
9, chỉ định tính endian của bytestring của bạn. Nó có thể là
import sys
int.from_bytes(b'\x11', byteorder=sys.byteorder)  # => 17
bin(int.from_bytes(b'\x11', byteorder=sys.byteorder))  # => '0b10001'
0 hoặc
import sys
int.from_bytes(b'\x11', byteorder=sys.byteorder)  # => 17
bin(int.from_bytes(b'\x11', byteorder=sys.byteorder))  # => '0b10001'
1. Bạn cũng có thể sử dụng
import sys
int.from_bytes(b'\x11', byteorder=sys.byteorder)  # => 17
bin(int.from_bytes(b'\x11', byteorder=sys.byteorder))  # => '0b10001'
2 để lấy byteorder gốc của máy chủ.

import sys
int.from_bytes(b'\x11', byteorder=sys.byteorder)  # => 17
bin(int.from_bytes(b'\x11', byteorder=sys.byteorder))  # => '0b10001'

Đã trả lời ngày 10 tháng 7 năm 2017 lúc 11:32Jul 10, 2017 at 11:32

Hướng dẫn bytes to decimal python - byte sang python thập phân

4

Lặp lại đối tượng byte cung cấp cho bạn 8 ints mà bạn có thể dễ dàng định dạng để xuất trong biểu diễn nhị phân:

import numpy as np

>>> my_bytes = np.random.bytes(10)
>>> my_bytes
b'_\xd9\xe97\xed\x06\xa82\xe7\xbf'

>>> type(my_bytes)
bytes

>>> my_bytes[0]
95

>>> type(my_bytes[0])
int

>>> for my_byte in my_bytes:
>>>     print(f'{my_byte:0>8b}', end=' ')

01011111 11011001 11101001 00110111 11101101 00000110 10101000 00110010 11100111 10111111

Một chức năng cho biểu diễn chuỗi hex được tích hợp:

>>> my_bytes.hex(sep=' ')
'5f d9 e9 37 ed 06 a8 32 e7 bf'

Đã trả lời ngày 22 tháng 9 năm 2020 lúc 23:28Sep 22, 2020 at 23:28

JimjimJim

1.3091 huy hiệu vàng9 Huy hiệu bạc16 Huy hiệu đồng1 gold badge9 silver badges16 bronze badges

Hàm python byte () hàm byte () trả về đối tượng byte. Nó có thể chuyển đổi các đối tượng thành các đối tượng byte hoặc tạo đối tượng byte trống của kích thước được chỉ định.
This statement should be equivalent to the code in the original question:

Làm thế nào để bạn chuyển đổi int thành byte theo cách thủ công?Show

  • Sử dụng Convert.tobyte (IntValue) sẽ chuyển đổi giá trị số nguyên của bạn thành byte. Nếu giá trị đã nhập quá lớn hoặc quá nhỏ, nó sẽ thông qua OverflowException. Tốt hơn để sử dụng byte.
  • Vượt qua byteorder = "Little"
  • Vượt qua đã ký = true
  • Chuỗi python đến từ điển
  • Chuỗi python để mảng
  • Giá trị INT có thể được chuyển đổi thành byte bằng cách sử dụng phương thức int.to_bytes (). Phương pháp này được gọi trên một giá trị INT, không được hỗ trợ bởi Python 2 (yêu cầu Python3 tối thiểu) để thực hiện.
  • Để an toàn, Python phân bổ một số byte cố định của không gian trong bộ nhớ cho mỗi biến của một loại số nguyên thông thường, được gọi là int in python. Thông thường, một số nguyên chiếm bốn byte, hoặc 32 bit.

>>> tuple( struct.pack("!I", number) )
('\x00', '\x00', '\x00', 'd')

Byte () làm gì trong Python?
If your integers are larger than int32, you can use

import sys
int.from_bytes(b'\x11', byteorder=sys.byteorder)  # => 17
bin(int.from_bytes(b'\x11', byteorder=sys.byteorder))  # => '0b10001'
3 in the call to
import sys
int.from_bytes(b'\x11', byteorder=sys.byteorder)  # => 17
bin(int.from_bytes(b'\x11', byteorder=sys.byteorder))  # => '0b10001'
4 for int64 (if your system supports
import sys
int.from_bytes(b'\x11', byteorder=sys.byteorder)  # => 17
bin(int.from_bytes(b'\x11', byteorder=sys.byteorder))  # => '0b10001'
5).
And
import sys
int.from_bytes(b'\x11', byteorder=sys.byteorder)  # => 17
bin(int.from_bytes(b'\x11', byteorder=sys.byteorder))  # => '0b10001'
6 or even
import sys
int.from_bytes(b'\x11', byteorder=sys.byteorder)  # => 17
bin(int.from_bytes(b'\x11', byteorder=sys.byteorder))  # => '0b10001'
7 will work in place of
import sys
int.from_bytes(b'\x11', byteorder=sys.byteorder)  # => 17
bin(int.from_bytes(b'\x11', byteorder=sys.byteorder))  # => '0b10001'
8.

Hàm python byte () hàm byte () trả về đối tượng byte. Nó có thể chuyển đổi các đối tượng thành các đối tượng byte hoặc tạo đối tượng byte trống của kích thước được chỉ định.

[ ord(c) for c in struct.pack("!I", number) ]
[0, 0, 0, 100]

Làm thế nào để bạn chuyển đổi int thành byte theo cách thủ công?

>>> map( ord, tuple( struct.pack("!I", number) ) )
[0, 0, 0, 100]

Sử dụng Convert.tobyte (IntValue) sẽ chuyển đổi giá trị số nguyên của bạn thành byte. Nếu giá trị đã nhập quá lớn hoặc quá nhỏ, nó sẽ thông qua OverflowException. Tốt hơn để sử dụng byte.

Trong trường hợp bất cứ ai nhìn vào câu hỏi này sau đó ... Tuyên bố này phải tương đương với mã trong câu hỏi ban đầu:

Nội phân Chính show

Giá trị trả về

  • Và tôi không nghĩ rằng nó quan trọng thứ tự byte chủ là gì. Nếu số nguyên của bạn lớn hơn Int32, bạn có thể sử dụng
    import sys
    int.from_bytes(b'\x11', byteorder=sys.byteorder)  # => 17
    bin(int.from_bytes(b'\x11', byteorder=sys.byteorder))  # => '0b10001'
    
    3 trong cuộc gọi đến
    import sys
    int.from_bytes(b'\x11', byteorder=sys.byteorder)  # => 17
    bin(int.from_bytes(b'\x11', byteorder=sys.byteorder))  # => '0b10001'
    
    4 cho Int64 (nếu hệ thống của bạn hỗ trợ
    import sys
    int.from_bytes(b'\x11', byteorder=sys.byteorder)  # => 17
    bin(int.from_bytes(b'\x11', byteorder=sys.byteorder))  # => '0b10001'
    
    5). Và
    import sys
    int.from_bytes(b'\x11', byteorder=sys.byteorder)  # => 17
    bin(int.from_bytes(b'\x11', byteorder=sys.byteorder))  # => '0b10001'
    
    6 hoặc thậm chí
    import sys
    int.from_bytes(b'\x11', byteorder=sys.byteorder)  # => 17
    bin(int.from_bytes(b'\x11', byteorder=sys.byteorder))  # => '0b10001'
    
    7 sẽ hoạt động thay cho
    import sys
    int.from_bytes(b'\x11', byteorder=sys.byteorder)  # => 17
    bin(int.from_bytes(b'\x11', byteorder=sys.byteorder))  # => '0b10001'
    
    8.
  • Lưu ý, kết quả là một chuỗi các đối tượng
    import sys
    int.from_bytes(b'\x11', byteorder=sys.byteorder)  # => 17
    bin(int.from_bytes(b'\x11', byteorder=sys.byteorder))  # => '0b10001'
    
    9 (mỗi đối tượng giữ một byte duy nhất), không phải số nguyên. Nếu bạn phải có một danh sách các số nguyên, bạn có thể làm điều này:
  • Trong trường hợp bất cứ ai nhìn vào câu hỏi này sau đó ... Tuyên bố này phải tương đương với mã trong câu hỏi ban đầu:

    Nội phân Chính show

    Giá trị trả về

    Và tôi không nghĩ rằng nó quan trọng thứ tự byte chủ là gì. Nếu số nguyên của bạn lớn hơn Int32, bạn có thể sử dụng

    import sys
    int.from_bytes(b'\x11', byteorder=sys.byteorder)  # => 17
    bin(int.from_bytes(b'\x11', byteorder=sys.byteorder))  # => '0b10001'
    
    3 trong cuộc gọi đến
    import sys
    int.from_bytes(b'\x11', byteorder=sys.byteorder)  # => 17
    bin(int.from_bytes(b'\x11', byteorder=sys.byteorder))  # => '0b10001'
    
    4 cho Int64 (nếu hệ thống của bạn hỗ trợ
    import sys
    int.from_bytes(b'\x11', byteorder=sys.byteorder)  # => 17
    bin(int.from_bytes(b'\x11', byteorder=sys.byteorder))  # => '0b10001'
    
    5). Và
    import sys
    int.from_bytes(b'\x11', byteorder=sys.byteorder)  # => 17
    bin(int.from_bytes(b'\x11', byteorder=sys.byteorder))  # => '0b10001'
    
    6 hoặc thậm chí
    import sys
    int.from_bytes(b'\x11', byteorder=sys.byteorder)  # => 17
    bin(int.from_bytes(b'\x11', byteorder=sys.byteorder))  # => '0b10001'
    
    7 sẽ hoạt động thay cho
    import sys
    int.from_bytes(b'\x11', byteorder=sys.byteorder)  # => 17
    bin(int.from_bytes(b'\x11', byteorder=sys.byteorder))  # => '0b10001'
    
    8.

    Lưu ý, kết quả là một chuỗi các đối tượng

    import sys
    int.from_bytes(b'\x11', byteorder=sys.byteorder)  # => 17
    bin(int.from_bytes(b'\x11', byteorder=sys.byteorder))  # => '0b10001'
    
    9 (mỗi đối tượng giữ một byte duy nhất), không phải số nguyên. Nếu bạn phải có một danh sách các số nguyên, bạn có thể làm điều này:int.tobytes()

    Chuỗi Python cho JSONint.to_bytes(). The method is invoked on an int value, is not supported by Python 2 (requires minimum Python3) for execution.

    Chuỗi python để mảngint.to_bytes(length, byteorder)

    Làm thế nào để bạn chuyển đổi int thành byte trong python?

    Giá trị INT có thể được chuyển đổi thành byte bằng cách sử dụng phương thức int.to_bytes (). Phương pháp này được gọi trên một giá trị INT, không được hỗ trợ bởi Python 2 (yêu cầu Python3 tối thiểu) để thực hiện.

    Có bao nhiêu byte là một int trong Python?“little” where most significant bit is stored at the end and least at the beginning, or big, where MSB is stored at start and LSB at the end. 

    Để an toàn, Python phân bổ một số byte cố định của không gian trong bộ nhớ cho mỗi biến của một loại số nguyên thông thường, được gọi là int in python. Thông thường, một số nguyên chiếm bốn byte, hoặc 32 bit.

    Byte () làm gì trong Python?

    Hàm python byte () hàm byte () trả về đối tượng byte. Nó có thể chuyển đổi các đối tượng thành các đối tượng byte hoặc tạo đối tượng byte trống của kích thước được chỉ định.

    Python3

    Làm thế nào để bạn chuyển đổi int thành byte theo cách thủ công?

    Sử dụng Convert.tobyte (IntValue) sẽ chuyển đổi giá trị số nguyên của bạn thành byte. Nếu giá trị đã nhập quá lớn hoặc quá nhỏ, nó sẽ thông qua OverflowException. Tốt hơn để sử dụng byte.

    >>> my_bytes.hex(sep=' ')
    '5f d9 e9 37 ed 06 a8 32 e7 bf'
    
    1
    >>> my_bytes.hex(sep=' ')
    '5f d9 e9 37 ed 06 a8 32 e7 bf'
    
    2

    Python3

    Trong trường hợp bất cứ ai nhìn vào câu hỏi này sau đó ... Tuyên bố này phải tương đương với mã trong câu hỏi ban đầu:

    Nội phân Chính show

    >>> my_bytes.hex(sep=' ')
    '5f d9 e9 37 ed 06 a8 32 e7 bf'
    
    1
    >>> my_bytes.hex(sep=' ')
    '5f d9 e9 37 ed 06 a8 32 e7 bf'
    
    2

    Đầu ra

    b'\n\x00\x00\x00\x00'

    Giá trị trả vềConverting integer to string and string to bytes 

    Và tôi không nghĩ rằng nó quan trọng thứ tự byte chủ là gì. Nếu số nguyên của bạn lớn hơn Int32, bạn có thể sử dụng

    import sys
    int.from_bytes(b'\x11', byteorder=sys.byteorder)  # => 17
    bin(int.from_bytes(b'\x11', byteorder=sys.byteorder))  # => '0b10001'
    
    3 trong cuộc gọi đến
    import sys
    int.from_bytes(b'\x11', byteorder=sys.byteorder)  # => 17
    bin(int.from_bytes(b'\x11', byteorder=sys.byteorder))  # => '0b10001'
    
    4 cho Int64 (nếu hệ thống của bạn hỗ trợ
    import sys
    int.from_bytes(b'\x11', byteorder=sys.byteorder)  # => 17
    bin(int.from_bytes(b'\x11', byteorder=sys.byteorder))  # => '0b10001'
    
    5). Và
    import sys
    int.from_bytes(b'\x11', byteorder=sys.byteorder)  # => 17
    bin(int.from_bytes(b'\x11', byteorder=sys.byteorder))  # => '0b10001'
    
    6 hoặc thậm chí
    import sys
    int.from_bytes(b'\x11', byteorder=sys.byteorder)  # => 17
    bin(int.from_bytes(b'\x11', byteorder=sys.byteorder))  # => '0b10001'
    
    7 sẽ hoạt động thay cho
    import sys
    int.from_bytes(b'\x11', byteorder=sys.byteorder)  # => 17
    bin(int.from_bytes(b'\x11', byteorder=sys.byteorder))  # => '0b10001'
    
    8.

    • Lưu ý, kết quả là một chuỗi các đối tượng
      import sys
      int.from_bytes(b'\x11', byteorder=sys.byteorder)  # => 17
      bin(int.from_bytes(b'\x11', byteorder=sys.byteorder))  # => '0b10001'
      
      9 (mỗi đối tượng giữ một byte duy nhất), không phải số nguyên. Nếu bạn phải có một danh sách các số nguyên, bạn có thể làm điều này:
    • ... Hoặc cái này:

    Python3

    Nhưng sử dụng

    import numpy as np
    
    >>> my_bytes = np.random.bytes(10)
    >>> my_bytes
    b'_\xd9\xe97\xed\x06\xa82\xe7\xbf'
    
    >>> type(my_bytes)
    bytes
    
    >>> my_bytes[0]
    95
    
    >>> type(my_bytes[0])
    int
    
    >>> for my_byte in my_bytes:
    >>>     print(f'{my_byte:0>8b}', end=' ')
    
    01011111 11011001 11101001 00110111 11101101 00000110 10101000 00110010 11100111 10111111
    
    
    0 bắt đầu làm cho mọi thứ trở nên lộn xộn một chút.

    Xem thảo luận

    Cải thiện bài viết

    >>> my_bytes.hex(sep=' ')
    '5f d9 e9 37 ed 06 a8 32 e7 bf'
    
    1
    [ ord(c) for c in struct.pack("!I", number) ]
    [0, 0, 0, 100]
    
    6


    Lưu bài viết
    problem.

    Tôi muốn chia số nguyên không dấu 32 bit / 4 thành 4 biến byte riêng biệt theo logic sau: -
    variables according to the following logic: -

    Số bit 0..7 Byte 1 Bit Số 8..15 Byte 2 Bit Số 16..23 BYTE 3 BIT Số 24..31 byte 4
    bit numbers 8..15 byte 2
    bit numbers 16..23 byte 3
    bit numbers 24..31 byte 4

    Mỗi biến byte này có chứa dữ liệu số nguyên từ 0 đến 255 (hoặc 0 đến FF ở chế độ Hex)
    FF in hex mode)

    Tôi đã nghĩ rằng struct.unpack có định dạng tin nhắn đầu vào của 'Tôi' sẽ là cách để thực hiện, nhưng báo cáo của nó là một lỗi mà nó không muốn chấp nhận một số nguyên.
    be the way to do it, but its reporting an error that it doesn't want to
    accept an integer.

    Xin vui lòng bất cứ ai có thể tư vấn?

    11 tháng 5 '07 #1

    Python 3.2 hiện có một hàm gọi là int.from_bytes () để chuyển đổi byte thành một số nguyên. Để tạo byte trong Python, hãy sử dụng phương thức byte (). Các byte () là một phương thức tích hợp trả về các byte bất biến & nbsp; đối tượng được khởi tạo với kích thước và dữ liệu đã cho.int.from_bytes() to convert bytes to an integer. To create bytes in Python, use the bytes() method. The bytes() is a built-in method that returns immutable bytes object initialized with the given size and data.

    Để chuyển đổi byte thành int trong python, hãy sử dụng phương thức int.from_bytes (). Giá trị byte có thể được thay thế với giá trị INT bằng hàm int.from_bytes ().int.from_bytes() method. A byte value can be interchanged to an int value using the int.from_bytes() function.

    Hàm int.from_bytes () lấy & nbsp; byte, byteorder, đã ký, *& nbsp; làm tham số và trả về số nguyên được biểu thị bằng mảng byte đã cho.int.from_bytes() function takes bytes, byteorder, signed, * as parameters and returns the integer represented by the given array of bytes.

    Cú pháp

    int.from_bytes(bytes, byteorder, *, signed=False)

    Tranh luận

    Byte: & nbsp; nó là một đối tượng byte.It is a byte object.

    ByteArder: & nbsp; nó xác định thứ tự biểu diễn của giá trị số nguyên. Byteorder có thể có các giá trị như là một chút, một chút trong đó bit quan trọng nhất được lưu trữ ở cuối của Big Big, nơi MSB được lưu trữ khi bắt đầu và LSB ở cuối.It determines the order of representation of the integer value. The byteorder can have values as either “little,” where the most significant bit is stored at the end of “big”, where MSB is stored at the start, and LSB at the end.

    Đã ký: Nó có một giá trị mặc định sai. Nó cho biết có thể đại diện cho 2 bổ sung của một số.It has a False default value. It indicates whether to represent 2’s complement of a number.

    Giá trị trả về

    Nó trả về số nguyên được biểu thị bằng mảng byte đã cho.

    Thí dụ

    error struct.error: unpack requires a bytes object of length 2
    
    0

    Đầu ra

    error struct.error: unpack requires a bytes object of length 2
    
    1

    Bạn có thể thấy rằng chúng tôi đã vượt qua byteorder = lớn. Đối số byteorder xác định thứ tự byte được sử dụng để thể hiện số nguyên. Nếu byteorder là một ít, thì byte quan trọng nhất là ở đầu mảng byte.byteorder = big. The byteorder argument determines the byte order used to represent the integer. If byteorder is “little“, the most significant byte is at the beginning of the byte array.

    Vượt qua byteorder = "Little"

    Nếu byteorder là một ít, thì byte quan trọng nhất là ở cuối mảng byte.little“, the most significant byte is at the end of the byte array.

    error struct.error: unpack requires a bytes object of length 2
    
    2

    Đầu ra

    error struct.error: unpack requires a bytes object of length 2
    
    3

    Bạn có thể thấy rằng chúng tôi đã vượt qua byteorder = lớn. Đối số byteorder xác định thứ tự byte được sử dụng để thể hiện số nguyên. Nếu byteorder là một ít, thì byte quan trọng nhất là ở đầu mảng byte.

    Vượt qua byteorder = "Little"int.from_bytes() method also accepts the signed argument. By default, its value is False.

    Nếu byteorder là một ít, thì byte quan trọng nhất là ở cuối mảng byte.signed = True and see the output.

    error struct.error: unpack requires a bytes object of length 2
    
    4

    Đầu ra

    error struct.error: unpack requires a bytes object of length 2
    
    5

    Bạn có thể thấy rằng chúng tôi đã vượt qua byteorder = lớn. Đối số byteorder xác định thứ tự byte được sử dụng để thể hiện số nguyên. Nếu byteorder là một ít, thì byte quan trọng nhất là ở đầu mảng byte.

    Vượt qua byteorder = "Little"

    Nếu byteorder là một ít, thì byte quan trọng nhất là ở cuối mảng byte.

    Vượt qua đã ký = true

    Phương thức int.from_bytes () cũng chấp nhận đối số đã ký. Theo mặc định, giá trị của nó là sai.

    Hãy để một ví dụ khác và Pass đã ký = true và xem đầu ra.

    Tôi hy vọng bạn tìm thấy câu trả lời mà bạn đang tìm kiếm, và đó là nó để chuyển đổi byte thành số nguyên trong ví dụ Python.

    Xem thêm

    Chuỗi python đến intint. to_bytes(). The method is invoked on an int value, is not supported by Python 2 (requires minimum Python3) for execution.

    Chuỗi python thành hex

    Chuỗi python đến từ điểnfour bytes, or 32 bits.

    Chuỗi Python cho JSON

    Chuỗi python để mảngreturns a bytes object. It can convert objects into bytes objects, or create empty bytes object of the specified size.

    Làm thế nào để bạn chuyển đổi int thành byte trong python?

    Giá trị INT có thể được chuyển đổi thành byte bằng cách sử dụng phương thức int.to_bytes (). Phương pháp này được gọi trên một giá trị INT, không được hỗ trợ bởi Python 2 (yêu cầu Python3 tối thiểu) để thực hiện. ToByte(intValue) which will convert your integer value to byte. If the entered value is too big or too small, it will through OverFlowException. Better to use the Byte.