Bài viết gốc: https://manhhomienbienthuy.bitbucket.io/2018/Sep/20/little-endian-vs-big-endian.html (vẫn xin phép người sáng tác

)
Little endian với big endian, đó là nhì cách làm khác biệt nhằm lưu trữ tài liệu dạng nhị phân (binary). Bình hay thì chúng ta cũng chẳng phải quyên tâm mang đến chúng làm cái gi. Bởi số đông bài toán sẽ được auto hoá không còn.Quý khách hàng vẫn xem: Endian là gì
Thế tuy thế gồm có tình huống, ví dụ khi nên giải pháp xử lý các tập tin có cấu trúc, tập tin binary, độc nhất là mọi tập tin được ghi bằng ngôn ngữ không giống, thì việc phát âm về little endian và big endian là rất quan trọng. Bởi còn nếu như không, khôn cùng hoàn toàn có thể họ sẽ đọc không đúng sản phẩm công nghệ trường đoản cú với xử trí với dữ liệu được phát âm không đúng.Bạn đã xem: Endian là gì
Dữ liệuDữ liệu là biểu hiện của lên tiếng bên dưới dạng tàng trữ được. tin tức là thiết bị trừu tượng, không có bề ngoài, chính là đều đọc biết về các sự đồ, vụ việc bao bọc bọn họ. Để lưu trữ, cũng tương tự truyền đạt công bố cho phần đa bạn, chúng ta đề nghị mang đến tài liệu. Dữ liệu có thể là chữ viết, hình hình ảnh được ghi trên giấy tờ, tất cả chúng ta tài liệu cơ mà con bạn hoàn toàn có thể hiểu được.quý khách hàng vẫn xem: Big endian với little endian là gì, bit endian cùng little endian trong lập trình
Nhưng phần nhiều tài liệu đó rất cần phải được mã hoá một lần tiếp nữa, giả dụ chúng ta mong mỏi tàng trữ bọn chúng trên laptop. Nlỗi chúng ta đa số 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 bắt buộc đông đảo dữ liệu cần được mã hoá thành nhị phân new có thể cách xử trí trên máy vi tính được.
Bạn đang xem: Big endian là gì
Thực ra điều đó chỉ đúng với máy vi tính số (digital electronic computer). Nghe nói hiện giờ máy tính xách tay lượng tử, máy vi tính sinh học tập cũng đang rất được trở nên tân tiến, mong muốn vào vài năm tới, bọn họ đã update lại kỹ năng về tài liệu.
Thực ra, laptop không hiểu biết nhiều được những cam kết từ 0, một trong hệ nhị phân đâu, nó chuyển động theo những biểu đạt điện tử. Mô tả đúng đắn thì vô cùng khó, cơ mà bạn cũng có thể phát âm "sơ sơ" rằng, chạm mặt bit 1 thì sẽ sở hữu chiếc diện, gặp bit 0 thì không tồn tại. bởi thế, những bit 0, 1 được cách xử trí thành các biểu thị năng lượng điện tử khớp ứng, và bọn họ coi đó nhỏng máy tính sẽ hiểu được dữ liệu nhị phân.
Thế nhưng lại, tuy nhiên cùng thực hiện tín hiệu dạng nhị phân, những máy tính xách tay không giống nhau cũng ko thực thụ nói phổ biến một ngữ điệu. Cũng y như coi tín đồ vậy, khi chú ý các cam kết từ bỏ a, b, c bao gồm tín đồ đọc, bao gồm tín đồ không. Máy tính Lúc chú ý vào các biểu đạt khớp ứng cùng với những ký kết hiệu 0 hay như là một, từng máy tính rất có thể đọc theo một biện pháp khác nhau.
Thế tuy vậy, hết sức may là những máy tính xách tay vẫn vận động theo số đông tiêu chuẩn chỉnh bình thường, thế cho nên nó vẫn rất có thể tiếp xúc cùng nhau được. Tuy nhiên, lưu ý rằng, không hẳn bất cứ thời điểm như thế nào, những máy tính cũng rất có thể phát âm được cho nhau.
Trong máy vi tính, những tài liệu nhị phân ko được cách xử lý theo từng bit đơn côi, cơ mà được giải pháp xử lý thành từng kăn năn 8 bit một, cùng đơn vị chức năng cách xử trí nhỏ dại độc nhất vô nhị này hotline là byte.
ví dụ như, số nguyên 123456789 được biểu diễn dưới dạng nhị phân vẫn là (ở đây tôi nhận định rằng phong cách tài liệu int sẽ có được kích thước là 4 byte, mặc dù, các khối hệ thống 64 bit đã nâng kích thước này lên 8 byte)
00000111 01011011 11001101 00010101Để ngắn thêm gọn, chúng ta cũng có thể viết nó dưới dạng hexa nhỏng sau:
07 5b cd 15Đã tất cả lúc nào, các bạn 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 cầm cố như thế nào không. Quý khách hàng cho rằng, nó sẽ được ghi theo thứ tự theo đồ vật từ mà bọn họ vẫn đọc với viết sống trên, thì chúng ta đã nhầm.
Đây là biện pháp viết theo phong cách số Ả rập mang đến họ dễ hiểu thôi, máy vi tính ko "đọc" những cam kết trường đoản cú giống hệt như chúng ta cho nên nó cũng không lưu trữ như là giải pháp bọn họ viết các ký từ này ra đâu. Việc ghi tài liệu ra làm sao đó là lúc little endian và big endian được dùng mang lại.
Little endian và big endian là gì?Little endian và big endian là nhì cách thức khác nhau để lưu trữ dữ liệu. Sự khác hoàn toàn của little endian và big endian lúc tàng trữ đó là sinh sống vấn đề bố trí máy từ bỏ các byte dữ liệu.
Trong bề ngoài tàng trữ little endian (xuất phát điểm từ "little-end" nghĩa xong xuôi nhỏ tuổi hơn), byte cuối cùng trong trình diễn nhị phân trên sẽ tiến hành ghi trước. lấy ví dụ 123456789 ghi theo kiểu little endian vẫn thành
15 cd 5b 07Hơi ngược một chút ít đúng không? Big endian (khởi nguồn từ "big-end") thì ngược chở lại, là hiệ tượng ghi tài liệu theo lắp thêm trường đoản cú thông thường mà lại chúng ta vẫn cần sử dụng. 123456789 được lưu trữ vẫn theo đúng trang bị từ là
07 5b cd 15Các thuật ngữ big-kết thúc tuyệt little-over khởi nguồn từ cuốn tè tmáu Gulliver du ký kết (Gulliver"s Travels), trong các số ấy nhân thứ Lilliputans tranh biện về bài toán buộc phải đập trứng bởi đầu lớn xuất xắc nhỏ tuổi.
Và ngành IT sẽ áp dụng thuật ngữ ngày, tương đối như thể với nghĩa gốc. Lưu ý rằng, little endian tuyệt big endian chỉ khác biệt sống giải pháp thu xếp những byte dữ liệu, còn đồ vật từ bỏ từng bit trong byte thì như thể nhau. Rất may, các máy tính vẫn đang còn điểm trung này.
Thêm một chú ý nữa rằng, little endian tốt big endian chỉ khác hoàn toàn Lúc phải tàng trữ đều tài liệu có tương đối nhiều byte. Những dữ liệu chỉ có 1 byte (ví dụ ký trường đoản cú ASCII) thì ko ảnh hưởng gì (và đúng là dù cần sử dụng cách thức làm sao tác dụng tương tự như nhau)
Little endian cùng big endian được sử dụng trên đa số máy tính xách tay nào?Việc sắp xếp những byte tài liệu theo phong cách little endian xuất xắc big endian không những xảy ra Khi họ lưu trữ dữ liệu ra bộ nhớ ko kể. Mọi buổi giao lưu của máy tính các thực hiện dữ liệu nhị phân, buộc phải little endian/big endian hiện lên vào phần lớn buổi giao lưu của máy tính xách tay.
Ngoài vấn đề thực hiện little endian/big endian một phần dựa vào vào phần mềm (vì lập trình sẵn viên gắng ý thực hiện một trong nhị loại, hoặc ngữ điệu lập trình phương pháp trước), nó còn phụ thuộc vào bộ vi xử trí của chủ yếu máy vi tính kia.
Các bộ vi cách xử trí Intel các thực hiện little endian, các bộ vi cách xử trí cả ARM trước đó cũng là little endian, cơ mà hiện nay này ARM vẫn tăng cấp vi cách xử trí của bản thân mình thành bi-endian (Tức là cách xử lý cả little endian cùng big endian).
Các cỗ vi cách xử lý PowerPC cùng SPARK trước đây phần lớn là big endian, nhưng lại hiện thời bọn chúng cũng khá được upgrade thành bi-endian.
Các làm cho làm sao thì tốt hơn: little endian tuyệt big endian?Little endian tuyệt big endian cũng như tranh luận nơi bắt đầu về vấn đề đập trứng, không tồn tại một cách tiến hành làm sao thực sự xuất sắc rộng cách thức như thế nào.
Little endian xuất xắc big endian chỉ khác biệt sinh sống việc tàng trữ trang bị từ những byte tài liệu. Cả nhị cách làm gần như ko có tác dụng ảnh hưởng đến tốc độ cách xử lý của CPU. Thế đề nghị cả hai cách thức số đông vẫn trường tồn tuy nhiên tuy vậy và sẽ không bao giờ hoàn toàn có thể có một câu vấn đáp thoả đáng: Phương thức nào thì giỏi hơn?
Mỗi cách tiến hành đều phải sở hữu số đông ưu thế nhất mực. Với little endian, bởi byte nhỏ duy nhất luôn luôn nằm bên trái, nó sẽ được cho phép chúng ta đọc dữ liệu cùng với độ nhiều năm tuỳ ý. Nó sẽ tương đối thích hợp ví như họ buộc phải ép mẫu mã, ví dụ trường đoản cú int thành long int.
Với đưa định int là 4 byte, long int là 8 byte, ví như dùng little endian, Lúc ép hình trạng, can hệ bộ nhớ không nhất thiết phải đổi khác, chúng ta chỉ việc ghi tiếp những byte to hơn mà lại thôi.
Nhưng nếu như cũng trường hợp kia, nhưng áp dụng big endian, thì họ đã buộc phải dịch xúc tiến bộ nhớ lưu trữ hiện giờ thêm 4 byte nữa new tất cả không gian để tàng trữ.
Nhưng big endian cũng có nhưng ưu thế nhất định, với Việc gọi dữ liệu byte lớn nhất trước, nó sẽ khá thuận lợi khám nghiệm một vài là âm hay dương, do byte đựng dấu được gọi trước tiên.
Xem các byte tài liệu trong cỗ nhớ#include /* function khổng lồ 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 function for 0x01234567 */intmain () int i = 0x01234567; show_mem_rep ((char *) &i, sizeof (i)); return 0;Lúc thực hiện công tác bên trên, nếu như thiết bị của khách hàng là little endian thì hiệu quả vẫn là
67 45 23 01còn nếu trang bị các bạn là big endian thì nó đang hiển thị theo sản phẩm công nghệ tự thông thường
01 23 45 67Có biện pháp làm sao nhằm xác minh máy tính của chúng ta là little endian giỏi big endian tuyệt không? Có vô số các cách không giống nhau, bên dưới đó là một trong số những phương pháp đó:
Như vậy ảnh hưởng nạm như thế nào tới sự việc lập trìnhVề cơ phiên bản thì little endian giỏi big endian không có tác động lắm tới sự việc thiết kế. Phần phệ những xây dựng viên không bắt buộc quan tâm những lắm, vị hầu hết việc đã có được các trình biên dịch/thông dich phụ trách không còn.
Xem thêm: Hướng Dẫn Cài Win 8 Bằng Usb, Hướng Dẫn Cách Cài Windows 8/8
Tuy nhiên, một trong những ngôi trường thích hợp, họ yêu cầu quyên tâm, đặc trưng Khi thay đổi dữ liệu giữa các máy vi tính khác biệt. Ví dụ: khi họ buộc phải xử trí một tệp tin gồm cấu trúc nuốm này, 4 byte đầu tiên là một vài nguim n, tiếp đến là n số nguim, mỗi số chỉ chiếm 4 byte bộ lưu trữ, v.v...
Trong trường vừa lòng này, lúc thừa nhận tệp tin được tạo thành xuất phát điểm từ một laptop khác, câu hỏi nó được ghi theo kiểu little endian tốt big endian cụ thể là ảnh hưởng rất nghiêm trọng, giả dụ áp dụng không nên cách tiến hành, họ vẫn thu về tài liệu không nên.
Một ngôi trường thích hợp khác nữa rất có thể xẩy ra vụ việc là lúc họ nghiền kiểu 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, họ đã ép dạng hình một array hai phần tử char thành một trong những nguim 2 byte (short int). Trong ví dụ này, little endian giỏi big endian cũng có thể có tác động rất cao.
Một laptop cần sử dụng little endian sẽ sở hữu tác dụng là 1 trong trong những lúc big endian đang cho công dụng là 256. Để tách những lỗi đáng tiếc hoàn toàn có thể xảy ra, hầu hết code nhỏng trên cần phải tách.
Vấn đề NUXINUXI là 1 vấn đề siêu khét tiếng tương quan cho little endian với big endian: UNIX được lưu trong một khối hệ thống big-endian sẽ tiến hành hiểu là NUXI trong một hệ thống little endian.
Giả sử chúng ta nên tàng trữ 4 byte (U, N, I, X) bởi nhì số nguyên dạng short int: UN với IX.
#include intmain () short int *s; // pointer to lớn phối shorts s = (short int *)malloc(sizeof(short int)); // point to location 0 *s = "UN"; // store first short: U * 256 + N (fictional code) s += 2; // point to lớn next location *s = "IX"; // store second short: I * 256 + X return 0;Đoạn code bên trên hoàn toàn hòa bình cùng với hệ thống, bất kỳ nó là little tuyệt big endian. Nếu họ lưu trữ các quý giá "UN" với "IX" khi hiểu ra, nó vẫn đã là "UNIX" xuất xắc không? Nếu gần như vấn đề chỉ xẩy ra trên một máy vi tính, dù là big endian xuất xắc little endian thì nó sẽ luôn luôn là như thế, vì chưng đông đảo vật dụng sẽ tiến hành tự động hoá giúp bọn họ.
Với bất cứ tài liệu nào cũng vậy, chúng ta luôn luôn thu được dữ liệu đúng giả dụ gọi và ghi vào cùng một hệ thống. Thế cơ mà, hãy để ý kỹ rộng về vấn đề thu xếp các byte vào bộ lưu trữ.
Một khối hệ thống big endian vẫn tàng trữ nlỗi sau:
U N I XCòn một khối hệ thống little endian thì đã nhỏng sau:
N U X IMặc cho dù trông tương đối ngược tuy vậy hệ thống little endian sẽ xử trí câu hỏi gọi giúp họ, yêu cầu tàng trữ điều đó nhưng lúc kéo ra bọn họ vẫn đang còn tài liệu ban đầu. Thế dẫu vậy Lúc bọn họ ghi dữ liệu này ra file, gửi qua một máy tính xách tay không giống. Và mỗi laptop lại giải pháp xử lý theo cách riêng rẽ của chính nó thì UNIX bên trên thứ big endian sẽ được phát âm là NUXI bên trên sản phẩm công nghệ little endian (cùng ngược lại).
Đây chính là vấn phần đa gian nguy nhất lúc bọn họ trao đỏi tài liệu tương hỗ giữa những máy tính cùng nhau, đặc trưng vào thời đại Intengày này.
Trao thay đổi dữ liệu thân các lắp thêm có endian không giống nhauNgày nay, rất nhiều máy tính đông đảo được kết nối để dàn xếp dữ liệu cùng nhau. Little endian giỏi big endian cũng đều đề xuất Bàn bạc với nhau, tuy thế làm cho ráng như thế nào để sở hữu đọc được nhau khi bọn chúng ko nói thông thường một thứ tiếng?
Có 2 chiến thuật chủ yếu đến việc này
Sử dụng bình thường định dạng
Một phương pháp dễ dàng nhất tất cả áp dụng tầm thường một định dang khi truyền dữ liệu.
Ví dụ hầu như tập tin dạng PNG các sẽ phải áp dụng big endian. Tương từ với những tập tin có cấu trúc khác. Đó là lý do vì sao họ thỉnh thoảng cần phải sử dụng phần nhiều phần mềm chuyên sử dụng để đọc với ghi những file này.
Thế mà lại trong kết nối với Internet, Việc truyền dữ liệu còn tinh vi hơn thế. Chúng ta cần thiết cđọng dùng một định dạng tệp tin nào đó, rồi truyền từng byte một thanh lịch thiết bị không giống được. Muốn tăng vận tốc, phải bọn họ đề xuất truyền những byte một thời gian.
Và lúc ấy chúng ta cần phải có một chuẩn chỉnh phổ biến. Hiện nay, chuẩn chỉnh phổ biến cho Việc truyền dữ liệu trên mạng, call là network byte order chính là big endian. Thế nhưng mà, mặc dù đã chuẩn chỉnh tầm thường rồi, thỉnh thoảng vẫn có số đông giao thức chơi chội hơn, thực hiện little endian.
Để hoàn toàn có thể biến hóa tài liệu thành dữ liệu chuẩn chỉnh theo network byte order, công tác phải điện thoại tư vấn hàm hton* (host-to-network) (vào ngữ điệu C). Trong hệ thống big endian, hàm này không bắt buộc làm cái gi cả, còn little endian đang thực hiện chuyển đối những byte một chút.
Dù khối hệ thống big endian ko nên biến đổi dữ liệu, Việc Gọi hàm này vẫn chính là khôn xiết quan trọng. Chương thơm trình của chúng ta có thể được viết bởi một ngôn ngữ (C) tuy vậy có thể được dịch với thực hiện sinh sống những khối hệ thống khác nhau, việc hotline hàm này để giúp họ có tác dụng điều ấy.
Tương từ bỏ, làm việc chiều ngược trở lại, bọn họ cần hotline hàm ntoh* để biến hóa dữ liệu nhận được tự mạng về tài liệu máy tính xách tay hoàn toàn có thể gọi được. Dường như, bọn họ còn đề xuất làm rõ hình dạng tài liệu nhưng bọn họ cần chuyển đổi nữa, list những hàm thay đổi nhỏng sau:
htons - "Host lớn 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 biệt khi thực hiện phân tách sẽ dữ liệu ở tầng tốt, ví dụ Khi soát sổ checksum của những gói tin ví dụ điển hình. Nếu không hiểu rõ về little endian cùng big endian thì Lúc nên thao tác về mạng, các bạn sẽ gặp nhiều khó khăn.
Sử dụng BOM (Byte Order Mark)
Một cách thực hiện không giống nhằm giải quyết sự khác hoàn toàn về endian là thực hiện BOM (Byte Order Mark). Đây là 1 trong ký từ bỏ đặc biệt quan trọng, có giá trị là 0xFEFF, được ghi tại vị trí thứ nhất của tệp tin.
Nếu bạn đọc cam kết tự này là 0xFFFE (bị ngược) thì gồm nghĩa file này được ghi với endian khác cùng với khối hệ thống của chúng ta, lúc đó, bạn sẽ cần được chuyển đổi phương thức đọc tài liệu một ít.
Thứ đọng hai, BOM không trọn vẹn thần thánh, bởi nó phụ thuộc vào thiết kế viên. Có người có tâm thì gọi với xử trí Lúc gặp BOM, gồm người thì hoàn toàn chẳng chú ý nó cùng coi nói nhỏng tài liệu thông thường. Unicode sử dụng BOM lúc tàng trữ tài liệu nhiều byte (các cam kết từ Unicode được mã hoá thành 2, 3 thậm chí là 4 byte).