Endian là gì

Bài viết gốc: https://manhhomienbienthuy.bitbucket.io/2018/Sep/20/little-endian-vs-big-endian.html (đã xin phxay người sáng tác


*

)

Little endian và big endian, đấy là hai cách làm không giống nhau nhằm tàng trữ tài liệu dạng nhị phân (binary). Bình thường thì chúng ta cũng chẳng buộc phải quyên tâm cho bọn chúng làm những gì. Bởi hồ hết việc sẽ được tự động hóa hoá không còn.Quý khách hàng đang xem: Endian là gì

Thế tuy thế bao gồm trường hợp, ví dụ Khi buộc phải xử lý các tập tin gồm kết cấu, tập tin binary, tuyệt nhất là những tập tin được ghi bằng ngữ điệu không giống, thì bài toán gọi về little endian cùng big endian là vô cùng đặc trưng. Bởi còn nếu không, vô cùng hoàn toàn có thể bọn họ sẽ hiểu không đúng thiết bị từ bỏ và cách xử trí với dữ liệu được phát âm sai.Quý Khách đang xem: Endian là gì

Dữ liệu

Dữ liệu là diễn tả của thông báo bên dưới dạng tàng trữ được. Thông tin là sản phẩm công nghệ trừu tượng, không tồn tại hình trạng, đó là phần lớn gọi biết về những sự vật, vụ việc bao quanh họ. Để lưu trữ, cũng tương tự truyền đạt đọc tin cho số đông fan, họ yêu cầu đến tài liệu. Dữ liệu có thể là chữ viết, hình ảnh được ghi trên chứng từ, toàn bộ bọn họ dữ liệu nhưng nhỏ fan có thể gọi được.

Bạn đang xem: Endian là gì

Nhưng phần đa tài liệu kia cần phải được mã hoá một đợt tiếp nhữa, nếu họ ước ao tàng trữ bọn chúng trên máy vi tính. Nlỗi bọn họ phần đa biết, máy tính xách tay chỉ làm việc cùng với dữ liệu được mã hoá bên dưới dạng nhị phân, vậy yêu cầu đông đảo tài liệu cần phải mã hoá thành nhị phân new có thể cách xử lý trên máy tính được.

Thực ra vấn đề đó chỉ đúng cùng với máy vi tính số (digital electronic computer). Nghe nói hiện thời máy vi tính lượng tử, máy tính xách tay sinch học tập cũng đang rất được cải tiến và phát triển, hy vọng vào vài năm tới, bọn họ đang update lại kiến thức và kỹ năng về dữ liệu.

Thực ra, máy vi tính thiếu hiểu biết được những cam kết từ 0, 1 trong các hệ nhị phân đâu, nó hoạt động theo các bộc lộ điện tử. Mô tả chính xác thì vô cùng cạnh tranh, tuy thế chúng ta cũng có thể phát âm "sơ sơ" rằng, chạm chán bit 1 thì sẽ sở hữu mẫu diện, gặp gỡ bit 0 thì không tồn tại. bởi vậy, những bit 0, 1 được giải pháp xử lý thành các bộc lộ điện tử tương ứng, cùng chúng ta coi kia nlỗi máy vi tính sẽ phát âm được dữ liệu nhị phân.

Thế tuy vậy, mặc dù cùng sử dụng tín hiệu dạng nhị phân, những laptop khác biệt cũng ko thực sự nói chung một ngữ điệu. Cũng y như coi bạn vậy, lúc chú ý các ký kết tự a, b, c gồm người gọi, tất cả fan ko. Máy tính Lúc chú ý vào những biểu đạt tương xứng cùng với những ký kết hiệu 0 hay như là 1, mỗi laptop rất có thể phát âm theo một giải pháp không giống nhau.

Thế tuy nhiên, hết sức may là các máy tính xách tay vẫn hoạt động theo hầu như tiêu chuẩn bình thường, thế nên nó vẫn có thể giao tiếp cùng nhau được. Tuy nhiên, chú ý rằng, không hẳn bất cứ thời gian nào, các máy tính xách tay cũng có thể đọc được cho nhau.

Trong laptop, những dữ liệu nhị phân ko được cách xử trí theo từng bit trơ khấc, mà lại được cách xử trí thành từng kăn năn 8 bit một, cùng đơn vị xử lý bé dại duy nhất này Call là byte.

lấy ví dụ, số nguim 123456789 được trình diễn bên dưới dạng nhị phân đã là (ở chỗ này tôi cho rằng kiểu dữ liệu int sẽ sở hữu được kích cỡ là 4 byte, mặc dù, nhiều khối hệ thống 64 bit vẫn nâng form size này lên 8 byte)

00000111 01011011 11001101 00010101Để ngắn thêm gọn gàng, bạn có thể viết nó dưới dạng hexa nlỗi sau:

07 5b cd 15Đã tất cả khi nào, chúng ta tự hỏi, lúc ghi tài liệu này bên trên đĩa cứng chẳng hạn, nó được ghi nạm như thế nào chưa. quý khách cho rằng, nó sẽ tiến hành ghi thứu tự theo thứ tự nhưng họ sẽ đọc và viết ngơi nghỉ trên, thì các bạn sẽ nhầm.

Đây là phương pháp viết theo phong cách số Ả rập mang đến họ dễ hiểu thôi, máy tính không "đọc" những ký tự y như họ vì thế nó cũng không lưu trữ tương đương giải pháp bọn họ viết những ký từ này ra đâu. Việc ghi dữ liệu ra làm sao đó là cơ hội little endian cùng big endian được dùng mang lại.

Little endian cùng big endian là gì?

Little endian và big endian là hai cách tiến hành khác biệt để tàng trữ tài liệu. Sự khác biệt của little endian và big endian Lúc lưu trữ chính là ở việc sắp xếp trang bị trường đoản cú những byte tài liệu.

Trong bề ngoài tàng trữ little endian (khởi nguồn từ "little-end" nghĩa ngừng nhỏ tuổi hơn), byte sau cuối vào biểu diễn nhị phân trên sẽ tiến hành ghi trước. lấy ví dụ như 123456789 ghi theo kiểu little endian sẽ thành

15 cd 5b 07Hơi ngược một chút đúng không? Big endian (khởi đầu từ "big-end") thì ngược lại, là hiệ tượng ghi tài liệu theo trang bị tự bình thường mà lại chúng ta vẫn dùng. 123456789 được tàng trữ vẫn theo như đúng lắp thêm tự là

07 5b cd 15Các thuật ngữ big-end giỏi little-end xuất phát điểm từ cuốn tè tngày tiết Gulliver du cam kết (Gulliver"s Travels), trong đó nhân đồ vật Lilliputans tranh luận về bài toán buộc phải đập trứng bởi đầu khổng lồ tốt bé dại.

Và ngành IT vẫn ứng dụng thuật ngữ ngày, tương đối giống cùng với nghĩa nơi bắt đầu. Lưu ý rằng, little endian giỏi big endian chỉ không giống nhau sinh hoạt cách sắp xếp những byte tài liệu, còn vật dụng tự từng bit vào byte thì giống nhau. Rất may, những laptop vẫn đang còn điểm trung này.

Thêm một chú ý nữa rằng, little endian giỏi big endian chỉ khác biệt Khi cần tàng trữ phần đông dữ liệu có tương đối nhiều byte. Những tài liệu chỉ có 1 byte (ví dụ ký từ ASCII) thì ko ảnh hưởng gì (và đúng là dù cần sử dụng cách tiến hành nào hiệu quả cũng như nhau)

Little endian cùng big endian được sử dụng trên mọi máy tính xách tay nào?

Việc thu xếp các byte tài liệu theo phong cách little endian tuyệt big endian không những xẩy ra lúc chúng ta lưu trữ tài liệu ra bộ nhớ xung quanh. Mọi hoạt động vui chơi của máy tính xách tay đều thực hiện tài liệu nhị phân, phải little endian/big endian tồn tại trong hầu như buổi giao lưu của máy tính xách tay.

Ngoài câu hỏi áp dụng little endian/big endian một phần dựa vào vào ứng dụng (vì thiết kế viên thế ý sử dụng một trong những hai các loại, hoặc ngôn ngữ xây dựng nguyên lý trước), nó còn phụ thuộc vào vào bộ vi cách xử lý của chủ yếu laptop kia.

Các cỗ vi giải pháp xử lý Hãng sản xuất Intel rất nhiều sử dụng little endian, những cỗ vi giải pháp xử lý cả ARM trước đó cũng là little endian, dẫu vậy hiện tại này ARM vẫn tăng cấp vi cách xử lý của chính mình thành bi-endian (Có nghĩa là cách xử trí cả little endian cùng big endian).

Các bộ vi cách xử lý PowerPC cùng SPARK trước đây đầy đủ là big endian, tuy nhiên hiện giờ bọn chúng cũng khá được tăng cấp thành bi-endian.

Các làm cho như thế nào thì giỏi hơn: little endian hay big endian?

Little endian xuất xắc big endian cũng giống như tranh cãi nơi bắt đầu về câu hỏi đập trứng, không có một thủ tục nào thực thụ xuất sắc hơn cách thức như thế nào.

Little endian xuất xắc big endian chỉ khác nhau sinh hoạt câu hỏi lưu trữ máy trường đoản cú các byte tài liệu. Cả nhì cách làm hầu hết ko làm cho tác động cho tốc độ cách xử lý của CPU. Thế cần cả nhị cách làm phần nhiều vẫn lâu dài song song với sẽ không khi nào rất có thể có một câu trả lời thoả đáng: Phương thức làm sao thì tốt hơn?

Mỗi cách làm đều có hầu hết điểm mạnh cố định. Với little endian, vày byte nhỏ tuổi nhất luôn nằm bên trái, nó đã có thể chấp nhận được họ đọc dữ liệu với độ lâu năm tuỳ ý. Nó sẽ rất thích hợp trường hợp họ bắt buộc ép vẻ bên ngoài, ví dụ trường đoản cú int thành long int.

Với trả định int là 4 byte, long int là 8 byte, ví như sử dụng little endian, lúc ép kiểu dáng, liên quan bộ lưu trữ không cần thiết phải đổi khác, chúng ta chỉ cần ghi tiếp những byte to hơn mà lại thôi.

Nhưng trường hợp cũng ngôi trường đúng theo kia, cơ mà áp dụng big endian, thì bọn họ đã đề nghị dịch địa chỉ bộ nhớ hiện tại thêm 4 byte nữa new gồm không gian nhằm lưu trữ.

Nhưng big endian cũng đều có tuy thế ưu thế khăng khăng, cùng với Việc gọi dữ liệu byte lớn nhất trước, nó sẽ khá dễ dàng chất vấn một số trong những là âm hay dương, vị byte cất dấu được đọc thứ nhất.

Xem thêm: Tại Sao Giày Nike Đắt Đỏ Nhất Nửa Đầu Năm 2020, Lý Do Để Bạn Sở Hữu Một Đôi Giày Nike Chính Hãng

Xem những byte dữ liệu vào bộ nhớ

#include /* function to show bytes in memory, from location start to lớn start+n */voidshow_mem_rep (char *start, int n) int i; for (i = 0; i n; i++) printf (" %.2x", start); printf ("");/* Main function lớn gọi above sầu function for 0x01234567 */intmain () int i = 0x01234567; show_mem_rep ((char *) &i, sizeof (i)); return 0;khi thực hiện chương trình trên, giả dụ thứ của bạn là little endian thì hiệu quả sẽ là

67 45 23 01còn giả dụ thiết bị chúng ta là big endian thì nó đang hiển thị theo trang bị từ thông thường

01 23 45 67Có biện pháp như thế nào để xác minh máy tính xách tay của họ là little endian tốt big endian hay không? Có vô vàn những giải pháp khác nhau, bên dưới đấy là một trong những những phương pháp đó:

Nếu máy tính của họ là little endian thì byte thứ nhất này sẽ là một trong, ngược trở lại thì nó sẽ là 0.

Điều này tác động thế làm sao tới việc lập trình

Về cơ phiên bản thì little endian tuyệt big endian không có tác động lắm đến sự việc lập trình sẵn. Phần mập các lập trình viên ko đề xuất quan tâm các lắm, bởi hầu như việc đã làm được những trình biên dịch/thông dich đảm nhiệm không còn.

Tuy nhiên, một số trường đúng theo, họ cần quan tâm, đặc trưng Khi đổi khác tài liệu thân các máy vi tính khác nhau. Ví dụ: Lúc chúng ta đề nghị cách xử lý một tệp tin gồm cấu trúc ráng này, 4 byte thứ nhất là một số nguyên n, kế tiếp là n số nguyên ổn, mỗi số chiếm phần 4 byte bộ lưu trữ, v.v...

Trong ngôi trường thích hợp này, lúc thừa nhận file được tạo nên xuất phát từ một laptop khác, việc nó được ghi theo kiểu little endian xuất xắc big endian cụ thể là ảnh hưởng siêu nghiêm trọng, ví như sử dụng sai cách thức, bọn họ sẽ thu về tài liệu sai.

Một ngôi trường hòa hợp không giống nữa có thể xảy ra sự việc là khi bọn họ ép thứ hạng cho các biến

#include intmain () unsigned char arr = 0x01, 0x00 ; unsigned short int x = *(unsigned short int *) arr; printf ("%d", x); return 0;Trong đoạn code bên trên, chúng ta đang xay dạng hình một array nhì phần tử char thành một vài ngulặng 2 byte (short int). Trong ví dụ này, little endian tuyệt big endian cũng đều có ảnh hưởng rất cao.

Một máy tính sử dụng little endian sẽ có công dụng là một trong trong khi big endian vẫn mang đến công dụng là 256. Để rời mọi lỗi không mong muốn rất có thể xảy ra, phần nhiều code nhỏng bên trên rất cần phải tách.

Vấn đề NUXI

NUXI là 1 trong những sự việc vô cùng danh tiếng tương quan đến little endian cùng big endian: UNIX được giữ trong một hệ thống big-endian sẽ tiến hành hiểu là NUXI trong một hệ thống little endian.

Giả sử họ đề nghị tàng trữ 4 byte (U, N, I, X) bằng nhì số nguyên dạng short int: UN với IX.

#include intmain () short int *s; // pointer lớn mix shorts s = (short int *)malloc(sizeof(short int)); // point khổng lồ location 0 *s = "UN"; // store first short: U * 256 + N (fictional code) s += 2; // point lớn next location *s = "IX"; // store second short: I * 256 + X return 0;Đoạn code trên hoàn toàn chủ quyền với hệ thống, bất kể nó là little tốt big endian. Nếu họ tàng trữ các quý giá "UN" với "IX" khi hiểu ra, nó vẫn sẽ là "UNIX" tuyệt không? Nếu phần đông vấn đề chỉ xảy ra trên một laptop, dù cho là big endian xuất xắc little endian thì nó đang luôn luôn là như vậy, vị đều sản phẩm công nghệ sẽ tiến hành tự động hoá góp bọn họ.

Với bất kể tài liệu nào cũng vậy, họ luôn luôn chiếm được tài liệu đúng ví như phát âm cùng ghi vào và một khối hệ thống. Thế dẫu vậy, hãy xem xét kỹ rộng về Việc bố trí các byte vào bộ lưu trữ.

Một khối hệ thống big endian đã lưu trữ nlỗi sau:

U N I XCòn một hệ thống little endian thì đã nhỏng sau:

N U X IMặc mặc dù trông tương đối ngược tuy vậy khối hệ thống little endian đã giải pháp xử lý câu hỏi phát âm góp chúng ta, phải lưu trữ điều đó tuy vậy Khi lấy ra họ vẫn có tài liệu thuở đầu. Thế nhưng mà Lúc bọn họ ghi tài liệu này ra file, đưa sang 1 laptop khác. Và từng laptop lại cách xử lý Theo phong cách riêng của nó thì UNIX trên lắp thêm big endian sẽ tiến hành phát âm là NUXI bên trên trang bị little endian (cùng ngược lại).

Đây đó là vấn đông đảo gian nguy nhất lúc bọn họ trao đỏi tài liệu hỗ tương giữa các máy vi tính cùng nhau, đặc biệt vào thời đại Intethời nay.

Trao đổi tài liệu thân các lắp thêm gồm endian khác nhau

Ngày nay, đông đảo máy tính xách tay rất nhiều được liên kết để thảo luận dữ liệu cùng nhau. Little endian giỏi big endian cũng rất nhiều phải đàm phán với nhau, mà lại có tác dụng ráng làm sao để sở hữu phát âm được nhau lúc bọn chúng không nói thông thường một thứ tiếng?

Có 2 giải pháp bao gồm mang đến bài toán này

Sử dụng chung định dạng

Một phương án đơn giản dễ dàng tốt nhất tất cả sử dụng chung một định dang khi truyền tài liệu.

lấy một ví dụ hầu hết tập tin dạng PNG hồ hết bắt buộc phải thực hiện big endian. Tương từ cùng với các tập tin bao gồm cấu trúc khác. Đó là lý do vày sao họ nhiều khi cần được cần sử dụng số đông ứng dụng chuyên dụng nhằm gọi với ghi những tệp tin này.

Thế dẫu vậy vào kết nối với Internet, câu hỏi truyền dữ liệu còn phức hợp hơn thế. Chúng ta không thể cứ đọng sử dụng một định hình tệp tin như thế nào kia, rồi truyền từng byte một thanh lịch sản phẩm không giống được. Muốn tăng tốc độ, bắt buộc họ phải truyền những byte một thời điểm.

Và lúc đó họ cần có một chuẩn phổ biến. Lúc này, chuẩn chỉnh bình thường mang lại việc truyền dữ liệu trên mạng, điện thoại tư vấn là network byte order chính là big endian. Thế tuy thế, mặc dù sẽ chuẩn chỉnh bình thường rồi, thỉnh thoảng vẫn có phần đông giao thức nghịch chội hơn, thực hiện little endian.

Để có thể đổi khác dữ liệu thành dữ liệu chuẩn chỉnh theo network byte order, chương trình đề nghị hotline hàm hton* (host-to-network) (vào ngữ điệu C). Trong hệ thống big endian, hàm này sẽ không đề xuất làm những gì cả, còn little endian đang triển khai gửi đối những byte một chút.

Dù khối hệ thống big endian ko yêu cầu đổi khác dữ liệu, việc Điện thoại tư vấn hàm này vẫn luôn là vô cùng quan trọng. Chương trình của bạn có thể được viết bởi một ngôn ngữ (C) dẫu vậy có thể được dịch cùng tiến hành làm việc nhiều hệ thống khác biệt, câu hỏi Hotline hàm này để giúp họ có tác dụng điều này.

Tương từ bỏ, làm việc chiều trở lại, chúng ta yêu cầu Gọi hàm ntoh* để chuyển đổi tài liệu nhận được trường đoản cú mạng về tài liệu máy vi tính rất có thể phát âm được. Ngoài ra, chúng ta còn yêu cầu nắm rõ loại dữ liệu mà họ phải biến đổi nữa, danh sách các hàm biến đổi nhỏng sau:

htons - "Host to Network Short"htonl- "Host khổng lồ Network Long"ntohs - "Network khổng lồ Host Short"ntohl - "Network lớn Host Long"

Những hàm này cực kỳ đặc trưng lúc tiến hành chia sẽ dữ liệu ở tầng tốt, ví dụ Khi bình chọn checksum của các gói tin ví dụ điển hình. Nếu không hiểu rõ về little endian và big endian thì Khi yêu cầu làm việc về mạng, các bạn sẽ gặp gỡ những khó khăn.

Sử dụng BOM (Byte Order Mark)

Một phương pháp không giống để giải quyết sự biệt lập về endian là áp dụng BOM (Byte Order Mark). Đây là 1 ký kết trường đoản cú đặc trưng, có mức giá trị là 0xFEFF, được ghi ở trong phần trước tiên của file.

Xem thêm: Quản Trị Kinh Doanh Tiếng Anh Là Gì, Vietgle Tra Từ

Thđọng nhị, BOM không hoàn toàn thần thánh, bởi vì nó nhờ vào vào thiết kế viên. Có người có trọng tâm thì hiểu và giải pháp xử lý Khi chạm mặt BOM, gồm bạn thì trọn vẹn không để ý nó và coi nói như dữ liệu thông thường. Unicode sử dụng BOM khi tàng trữ tài liệu những byte (các ký kết từ Unicode được mã hoá thành 2, 3 thậm chí là là 4 byte).


Chuyên mục: Hỏi Đáp