Hướng dẫn is python little or big endian? - trăn nhỏ hay endian lớn?

21

Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.

Tôi đang làm việc trên một chương trình nơi tôi lưu trữ một số dữ liệu trong một số nguyên và xử lý nó bitwise. Ví dụ: tôi có thể nhận được số 48, mà tôi sẽ xử lý từng bit. Nói chung, tính endian của các số nguyên phụ thuộc vào biểu diễn máy của số nguyên, nhưng Python có làm gì để đảm bảo rằng các INT sẽ luôn luôn là người cao su không? Hay tôi cần kiểm tra độ nội tâm như tôi trong C và sau đó viết mã riêng cho hai trường hợp?

Tôi hỏi bởi vì mã của tôi chạy trên một máy mặt trời và mặc dù cái mà nó đang chạy hiện đang sử dụng bộ xử lý Intel, tôi có thể phải chuyển sang máy có bộ xử lý Sun trong tương lai, mà tôi biết là lớn.

Được hỏi ngày 9 tháng 9 năm 2009 lúc 14:20Sep 9, 2009 at 14:20

Hướng dẫn is python little or big endian? - trăn nhỏ hay endian lớn?

Python's int có cùng độ chính của bộ xử lý mà nó chạy. Mô-đun struct cho phép bạn chuyển đổi Byte Blobs sang INTS (và Viceversa và một số loại dữ liệu khác) theo cách bản địa, ít endian hoặc lớn, tùy thuộc vào chuỗi định dạng bạn chọn: Bắt đầu định dạng với @ hoặc không Nhân vật endianness để sử dụng endianness bản địa (và kích thước bản địa - mọi thứ khác sử dụng kích thước tiêu chuẩn), '~' cho người bản địa, '' hoặc '!' cho lớn.

Đây là byte-by-byte, không bit; Không chắc chắn chính xác những gì bạn có nghĩa là xử lý từng bit trong bối cảnh này, nhưng tôi cho rằng nó có thể được hàm chứa tương tự.

Để xử lý "số lượng lớn" nhanh trong các trường hợp đơn giản, cũng xem xét mô-đun mảng-các phương pháp fromstringtostring có thể hoạt động trên số lượng lớn byte nhanh chóng và phương pháp byteswap có thể giúp bạn có tính "khác" ngược lại), một lần nữa nhanh chóng và cho một số lượng lớn các mặt hàng (toàn bộ mảng).

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

Alex Martellialex MartelliAlex Martelli

826K163 Huy hiệu vàng1203 Huy hiệu bạc1382 Huy hiệu Đồng163 gold badges1203 silver badges1382 bronze badges

2

Nếu bạn cần xử lý dữ liệu của mình 'bitwise' thì mô -đun bitstring có thể giúp bạn. Nó cũng có thể đối phó với sự thay đổi giữa các nền tảng.

Mô -đun struct là phương pháp tiêu chuẩn tốt nhất để xử lý tính nội tâm giữa các nền tảng. Ví dụ: gói này và giải nén các số nguyên 1, 2, 3 thành hai 'quần short' và một 'dài' (2 và 4 byte trên hầu hết các nền tảng) bằng cách sử dụng endianness bản địa:

>>> from struct import *
>>> pack('hhl', 1, 2, 3)
'\x00\x01\x00\x02\x00\x00\x00\x03'
>>> unpack('hhl', '\x00\x01\x00\x02\x00\x00\x00\x03')
(1, 2, 3)

Để kiểm tra tính endian của nền tảng theo chương trình, bạn có thể sử dụng

>>> import sys
>>> sys.byteorder

sẽ trả lại

>>> import sys
>>> sys.byteorder
1 hoặc
>>> import sys
>>> sys.byteorder
2.

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

Hướng dẫn is python little or big endian? - trăn nhỏ hay endian lớn?

Scott Griffithsscott GriffithsScott Griffiths

Phù bằng vàng 21K854 Huy hiệu bạc84 Huy hiệu đồng8 gold badges54 silver badges84 bronze badges

2

Đoạn trích sau đây sẽ cho bạn biết nếu mặc định hệ thống của bạn là Little Endian (nếu không thì đó là Big-Endian)

import struct
little_endian = (struct.unpack('

Tuy nhiên, lưu ý, điều này sẽ không ảnh hưởng đến hành vi của các toán tử bitwise:

>>> import sys
>>> sys.byteorder
3 bằng với
>>> import sys
>>> sys.byteorder
4 bất kể tính cuối cùng mặc định của hệ thống của bạn.

Đã trả lời ngày 12 tháng 12 năm 2013 lúc 5:18Dec 12, 2013 at 5:18

Kiểm tra khi nào?

Khi thực hiện các hoạt động bitwise, INT IN sẽ có cùng một nữ tính như INT bạn đặt vào. Bạn không cần phải kiểm tra điều đó. Bạn chỉ cần quan tâm đến điều này khi chuyển đổi sang/từ các chuỗi byte, bằng cả hai ngôn ngữ, afaik.

Trong Python, bạn sử dụng mô -đun cấu trúc cho điều này, phổ biến nhất là struct.pack () và struct.unpack ().

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

Lennart Regebrolennart RegebroLennart Regebro

162K41 Huy hiệu vàng221 Huy hiệu bạc251 Huy hiệu Đồng41 gold badges221 silver badges251 bronze badges

3

Có gì lớn

Big-endian là một đơn đặt hàng trong đó "End lớn" (giá trị quan trọng nhất trong chuỗi) được lưu trữ trước, tại địa chỉ lưu trữ thấp nhất. Little-endian là một thứ tự trong đó "kết thúc nhỏ" (giá trị ít quan trọng nhất trong chuỗi) được lưu trữ trước.

Làm thế nào để bạn biết nếu endian nhỏ hay lớn của nó

Trong các máy Little Endian, byte cuối cùng của biểu diễn nhị phân của loại dữ liệu multibyte được lưu trữ đầu tiên.Mặt khác, trong các máy endian lớn, byte đầu tiên của biểu diễn nhị phân của loại dữ liệu đa dạng được lưu trữ đầu tiên.. On the other hand, in big endian machines, first byte of binary representation of the multibyte data-type is stored first.

Hệ thống nào sử dụng lớn

Nhiều máy tính máy tính lớn, đặc biệt là các máy tính lớn của IBM, sử dụng kiến trúc lớn.Hầu hết các máy tính hiện đại, bao gồm cả PC, sử dụng hệ thống Little-Endian.Hệ thống PowerPC là Bi-endian vì nó có thể hiểu cả hai hệ thống., use a big-endian architecture. Most modern computers, including PCs, use the little-endian system. The PowerPC system is bi-endian because it can understand both systems.

Máy tính sử dụng endian lớn hay nhỏ?

Công ước Endianness bao gồm hai cách khác nhau để quyết định thứ tự của byte khi chuyển dữ liệu từ giữa thanh ghi và bộ nhớ.Cái đầu tiên được gọi là Big-Endian và người thứ hai được gọi là Little-Endian.Bộ xử lý Intel X86 là Little-Endian, vì vậy hầu hết các máy tính cá nhân đều ít endian.most personal computers are little-endian.