Hướng dẫn convert 8 bits to integer python - chuyển đổi 8 bit thành số nguyên python

Nói rằng tôi có 8 bit

Show
01010101

tương đương với byte

u

Nhưng tôi những gì tôi thực sự có là 8 nhị phân (tốt, số nguyên). Làm cách nào để chuyển đổi 8 nhị phân này thành byte tương ứng?

Tôi đang cô

byte = int(int('01010101'), 2)
byte = chr(byte)
byte = bytes(byte)

Nhưng điều này mang lại cho tôi một mảng byte thay vì một byte duy nhất ...

Đã hỏi ngày 27 tháng 9 năm 2014 lúc 20:49Sep 27, 2014 at 20:49

Hướng dẫn convert 8 bits to integer python - chuyển đổi 8 bit thành số nguyên python

4

Sau đây được hiểu là một bát phân, vì nó được đặt trước với

u
1

01010101

Nếu bạn muốn giải thích điều này là nhị phân, bạn sẽ thêm tiền tố

u
2

>>> 0b01010101
85

Điều này giống như đại diện cho số là

u
3

>>> int(0b01010101)
85

Và để thể hiện giá trị là

u
4

>>> chr(0b01010101)
'U'

Cũng lưu ý tiền tố cho

u
5 là
u
6

Đã trả lời ngày 27 tháng 9 năm 2014 lúc 20:53Sep 27, 2014 at 20:53

Hướng dẫn convert 8 bits to integer python - chuyển đổi 8 bit thành số nguyên python

Cory Kramercory KramerCory Kramer

Huy hiệu vàng 111K1515 gold badges160 silver badges209 bronze badges

2

Bạn đang sử dụng phiên bản Python nào? Tôi nhận được 85 và 'U' bằng cách sử dụng các câu lệnh tương tự như bạn đã làm, sử dụng 2.7.8:

int('01010101', 2)
>>> 85
int(int('01010101', 2))  # not needed
>>> 85
chr(int('01010101', 2))
>>> 'U'
bytes(chr(int('01010101', 2)))  # not needed
>>> 'U'

Để thực sự viết dữ liệu nhị phân vào tệp, hãy xem câu trả lời này (cho PY 2 và 3) và cái này. Tệp

u
7 phải là 'WB'. Và đừng chuyển đổi thành chr.

Đã trả lời ngày 27 tháng 9 năm 2014 lúc 21:21Sep 27, 2014 at 21:21

Aneroidaneroidaneroid

12.7k3 Huy hiệu vàng39 Huy hiệu bạc62 Huy hiệu Đồng3 gold badges39 silver badges62 bronze badges

1

Bạn có thể tìm thấy các bài viết của tôi về Wagtail và Scracy tại Accordbox.

Hướng dẫn convert 8 bits to integer python - chuyển đổi 8 bit thành số nguyên python

Michael Yin

Tôi là một nhà phát triển Python đam mê từ Trung Quốc và viết về Wagtail/Django và Scracy. Tôi cũng có sẵn để được thuê cho các công việc từ xa. Đọc thêm về tôi.


Python đã cung cấp thư viện để xử lý thao tác bit trong hầu hết các trường hợp, tuy nhiên, tôi không thể tìm thấy một cách tốt để chuyển đổi byte đơn 8 bit thành loại Int đã ký bằng cách sử dụng lib tích hợp.

Kịch bản

Dưới đây là kịch bản, một số nhà phát triển Java mới cần băm mật khẩu và lưu nó vào cơ sở dữ liệu, anh ta đã không chuyển đổi kết quả băm thành chuỗi HEX nhưng chỉ gọi là toString để lưu nó vào cơ sở dữ liệu.

Mã Java như thế này

StringBuilder sb = new StringBuilder();
for (byte b : strBytes) {
    sb.append(b);
    //this one is better choice
    //sb.append(String.format("%02X ", b));
}
return sb.toString();


Sample output 
12333-124-118-55-8153-6613-3745107-97-61-1232552-37-12432

Byte trong Java được biểu thị bằng int đã ký trong phạm vi (-128, 127), byte python được biểu thị bằng int không dấu trong phạm vi (0, 255). Vì vậy, tôi đã chuyển đổi byte 8 bit trong Python thành Int đã ký để so sánh thực hiện.

Solution-1

Vì Java sử dụng một chút để đánh dấu dấu hiệu, vì vậy chúng tôi có thể làm cho nó mà không cần sử dụng LIB 3 bên

if byte > 127:
    return (256-byte) * (-1)
else:
    return byte

Solution-2

Có một số LIB 3 bên để cung cấp hỗ trợ tốt cho bit thao tác. Bitstring được tôi khuyến nghị, bạn có thể sử dụng nó để làm việc theo bit.

u
0

Khá đơn giản! Và bạn có thể lặn sâu hơn để tìm tính năng tốt khác

Gửi cho tôi tin nhắn

Hãy cho tôi biết thêm về dự án của bạn và xem liệu tôi có thể giúp bạn không.

Liên hệ với tôi