2010-07-02 40 views
23

Tôi có một số câu hỏi về vấn đề cuối cùng có liên quan đến mức tôi đảm bảo đặt chúng vào một câu hỏi:Chi tiết về Endian-ness và .Net?

1) Kết thúc bằng phần cứng hoặc phần cứng?

2) Nếu nó được quyết định bởi phần cứng, làm thế nào tôi có thể tìm ra phần cứng cuối cùng trong C# là gì?

3) Mối quan hệ cuối cùng có ảnh hưởng đến các tương tác nhị phân như OR, AND, XOR hoặc thay đổi không? I E. Sẽ dịch chuyển một lần sang phải luôn luôn thay đổi chút ít quan trọng nhất?

4) Tôi nghi ngờ điều đó, nhưng có sự khác biệt nào về kết thúc từ các phiên bản khác nhau của khung .Net không? Tôi cho rằng chúng đều giống nhau, nhưng tôi đã học cách dừng giả định về một số chi tiết cấp thấp hơn như thế này.

Nếu cần, tôi có thể hỏi đây là các câu hỏi khác nhau, nhưng tôi nghĩ bất kỳ ai biết câu trả lời cho một trong số này có thể biết câu trả lời cho tất cả chúng (hoặc có thể chỉ cho tôi một hướng tốt).

Trả lời

26

1) Phần cứng.

2) BitConverter.IsLittleEndian

3) Endianness không ảnh hưởng đến hoạt động bitwise. Dịch chuyển sang phải là dịch chuyển theo hướng ít bit quan trọng nhất. CẬP NHẬT từ nhận xét của Rất tiếc: Tuy nhiên, tính cuối cùng ảnh hưởng đến đầu vào và đầu ra nhị phân. Khi đọc hoặc viết các giá trị lớn hơn một byte (ví dụ: đọc một số int từ một số BinaryReader hoặc sử dụng BitConverter), bạn phải tính đến độ tuổi cuối. Khi các giá trị được đọc chính xác, thì tất cả các hoạt động bitwise hoạt động như bình thường.

4) Hầu hết các phiên bản .NET đều không có giá trị. Các ngoại lệ đáng chú ý bao gồm XBox và một số nền tảng được hỗ trợ bởi Mono hoặc Compact Framework.

+2

Tôi không chắc chắn # 4 là hoàn toàn chính xác. Ví dụ,. Compact Compact Framework chạy trên nhiều thiết bị, tôi cho rằng một số trong số đó là lớn-endian. Và Mono (mặc dù không. Net, nhưng việc triển khai CLR hợp lệ) chắc chắn chạy trên nền tảng lớn. Tôi nghĩ Corey đã hỏi liệu sự kết thúc có khác với các phiên bản tăng dần của .Net (ví dụ, 1.0 .. 4.0) - câu trả lời cho điều đó là không - nó chỉ phụ thuộc vào phần cứng. –

+2

Tôi sẽ nhận xét thứ hai @Mark H. Endianness được quyết định bởi phần cứng và .Net sẽ chỉ sử dụng bất cứ thứ gì. Tuy nhiên, không có lớp học nào trong đó.Net sẽ dựa vào đặc biệt endianness (hoặc ít nhất là không có lớp học không nên :-)), vì vậy tốt nhất bạn có thể nói đó là thuyết bất khả tri, không phải là nó có endianness cụ thể. –

+0

@Mark: Tôi đã cập nhật câu trả lời để phản ánh Mono/CF. Tôi tin rằng nền tảng BE CF duy nhất là XBox. –

0

1) cũng không phải ... hoặc bạn có thể nói
do nhà phát triển phần cứng quyết định. Và bạn phải quyết định về nó nếu bạn viết phần mềm đọc/ghi các định dạng tệp nhất định mà không cần sử dụng các thư viện bên ngoài.
Không có vấn đề với endian Nếu bạn đọc từ một tập tin
* a byte
nhưng bạn phải quyết định làm thế nào để phiên dịch nó trong ít hoặc lớn định dạng endian nếu bạn đọc tất cả các kiểu dữ liệu nguyên thủy khác như
* số nguyên ,
* chuỗi,
* nổi.
Phần cứng không trợ giúp ở đây. Các BitConverter không giúp đỡ ở đây. Chỉ tài liệu về định dạng tệp mới có thể giúp và kiểm tra mã của bạn tất nhiên ...
chỉnh sửa: tìm thấy giải thích tốt về quảng cáo tại đây: http://betterexplained.com/articles/understanding-big-and-little-endian-byte-order/

Các vấn đề liên quan