Câu hỏi sau nảy sinh vì tôi đang cố gắng sử dụng các chuỗi bytes
làm các giá trị khóa và giá trị byte mà tôi hiểu là bằng nhau không được coi là bằng nhau.Python So sánh các byte byte
Tại sao mã python sau không được so sánh bằng nhau - không phải hai biểu diễn tương đương này của cùng một dữ liệu nhị phân (ví dụ được chọn để tránh endianess)?
b'0b11111111' == b'0xff'
Tôi biết những điều sau đây đánh giá đúng, chứng minh sự tương đương:
int(b'0b11111111', 2) == int(b'0xff', 16)
Nhưng tại sao lực lượng python tôi để biết các đại diện? Nó liên quan đến endian-ness? Có cách nào dễ dàng để ép buộc chúng so sánh tương đương với việc chuyển đổi tất cả thành ví dụ hay không, ví dụ: hex literals? Bất cứ ai có thể đề xuất một phương pháp minh bạch và rõ ràng để di chuyển giữa tất cả các đại diện trong một (phần nào) nền tảng độc lập cách (hoặc tôi hỏi quá nhiều)?
Edit:
Với những ý kiến dưới đây, nói rằng tôi muốn thực sự chỉ một cuốn từ điển sử dụng 8 bit dưới dạng b'0b11111111'
, thì tại sao con trăn mở rộng nó đến mười byte và làm thế nào để ngăn chặn điều đó?
Đây là một phần nhỏ hơn của cấu trúc dữ liệu cây lớn và mở rộng chỉ mục của tôi theo hệ số 80 có vẻ như một sự lãng phí rất lớn của bộ nhớ.
Nhưng không phải '0b' chỉ ra rằng chữ' byte' được dự định là biểu diễn nhị phân, bất kể cách bạn diễn giải nó như thế nào? –
@MatthewHemke: Nó chỉ có nghĩa là bạn có một giá trị byte 48 theo sau là một giá trị byte 98. Những * xảy ra * để có thể hiểu được như là các chữ cái ASCII '0' và' b'. –
Nếu đó là trường hợp, làm thế nào để tôi thực hiện là vì vậy mà tôi nhận được chuỗi byte được chính xác 1 byte mà tôi có nghĩa là? –